iOS 7 - 在特定视图中隐藏状态栏

12

这是一个非常独特的问题。我已经搜索了几个小时,但找不到答案。我想让我的应用程序中所有的UIViewControllers都显示UIStatusBar。但在某个UIViewController中,当你点击一个UIButton时,下面的方法会调用相机模态视图控制器。我希望在调用以下方法时隐藏状态栏:

-(BOOL)startCameraControllerFromViewController:(UIViewController*)controller
                                 usingDelegate:(id )delegate 

我尝试过更改 plist 文件,使用 UIViewController 基于状态栏 = YES(只想在拉起模态视图时隐藏 UIStatusBar

我还尝试了以上方法:

[[UIApplication sharedApplication] setStatusBarHidden:YES 
                                   withAnimation:UIStatusBarAnimationNone];
if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

    [[UIApplication sharedApplication] setStatusBarHidden:YES 
                                       withAnimation:UIStatusBarAnimationNone];

似乎什么都没有起作用,有人能帮忙吗?


请查看此答案:https://dev59.com/wWIj5IYBdhLWcg3w6I89#19867698 - John Riselvato
5个回答

16

在您的视图控制器中实现此方法。

-(BOOL)prefersStatusBarHidden
{
    return YES;
}

并在您想要的地方调用此方法,

[self prefersStatusBarHidden];

这就是我想要的,但仅当模态视图处于活动状态时。我没有为该视图单独创建一个类,它与父控制器在同一个类中。这只会将其隐藏在父控制器中。当子级被拉起时,它会淡入。 - Josue Espinosa
我无法确切理解你想要什么。当模态视图处于活动状态时,您调用此方法并检查模态视图是否处于活动状态,如果是,则返回Yes,否则返回No。if(modalView)return YES else return NO. - karthika
这就是我正在做的事情,但它只对父控制器有效,对模态视图没有影响。 - Josue Espinosa
试试这个,https://dev59.com/b23Xa4cB1Zd3GeqPh7vh - karthika

16

通过子类化UIImagePickerController,并将以下代码添加到.m文件中,解决了它:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

然后将其导入到使用选择器的类中,而不是初始化imagepicker,我要初始化子类。

注意:确保在您的plist文件中将"View controller-based status bar appearance"设置为"YES"。


不起作用,你确定这是你所做的唯一更改吗?附言:它不是UIImagePicker,而是UIImagePickerController。 - ozba
请确保在分配和初始化UIImagePickerController时,使用您的子类来代替。 - Josue Espinosa

3

您可以在plist中将状态栏隐藏,就像之前一样。然后在应用程序委托中调用setStatusBarHidden:NO,以在应用程序首次加载时将其设置为默认值。然后在需要隐藏状态栏的位置再次调用此方法,并将值设为YES。


0

我已经成功地在许多视图控制器中使用了-(BOOL)prefersStatusBarHidden{...},但是在没有导航控制器呈现的特定模态视图上却没有成功。根据Karthika的建议,我通过检查使用模态视图控制器隐藏iOS状态栏获得了成功。


0
-(void)viewWillApper:(BOOL)animated{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
-(void)viewWillDisappear:(BOOL)animated{
[[UIApplication sharedApplication] setStatusBarHidden:NO];
}

这段代码将设置您想要隐藏状态栏的视图控制器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接