在iOS7中隐藏状态栏

时间:2013-10-22 17:23:38

标签: objective-c xcode ios7

我需要在iOS7上隐藏状态栏。我已经尝试过设置:

Status bar is initially hidden

View controller-based status bar appearance

进入plist文件。当应用程序处于启动状态时,状态栏不会出现,但是当我更改视图控制器(是选项卡式应用程序)时,会出现状态栏!

我已经尝试设置

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

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

在视图控制器中,但不起作用。有什么想法吗?

提前谢谢你:)

更新

我通过将“查看基于控制器的状态栏外观”设置为“YES”到info.plist并调用方法来部分解决问题

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

进入视图控制器。但是现在我遇到了另一个问题:当我启动另一个控制器(UIImagePickerController)时会出现状态栏。我试图设置[myPicker prefersStatusBarHidden];,但它似乎是只读的。有人知道解决方案吗?

P.S。:UIViewControllerBasedStatusBarAppearance = NOUIViewControllerBasedStatusBarAppearance = NO是一回事......

2 个答案:

答案 0 :(得分:7)

将此密钥添加到您的info.plist

UIViewControllerBasedStatusBarAppearance = NO

答案 1 :(得分:3)

设置

UIViewControllerBasedStatusBarAppearance = YES

在info.plist和每个控制器实现中

- (BOOL)prefersStatusBarHidden {
    return YES; // or NO
}

然后,只要您需要更新状态栏外观(例如,在控制器的viewDidLoad中),请致电setNeedsStatusBarAppearanceUpdate

根据setNeedsStatusBarAppearanceUpdate的文档:

  

如果视图控制器的状态栏属性(例如隐藏/取消隐藏状态或样式)发生更改,请调用此方法。如果在动画块中调用此方法,则会将更改与动画块的其余部分一起设置动画。

例如

- (void)viewDidLoad {
    [super viewDidLoad];

    [self setNeedsStatusBarAppearanceUpdate];

    ...
}
每当视图控制器的视图加载时,

将隐藏/取消隐藏状态栏(除了其他潜在的样式更改)。

此外,您还可以设置动画块中包含调用的过渡动画

- (void)viewDidLoad {
    [super viewDidLoad];

    [UIView animateWithDuration:0.5 animations:^{
        [self setNeedsStatusBarAppearanceUpdate];
    }]; 

    ...
}