3

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

Status bar is initially hidden

View controller-based status bar appearance

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

我已经尝试设置

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

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

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

先感谢您 :)

更新

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

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

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

PS:UIViewControllerBasedStatusBarAppearance = NOUIViewControllerBasedStatusBarAppearance = NO是一样的东西..

4

2 回答 2

7

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

UIViewControllerBasedStatusBarAppearance = NO
于 2013-10-22T17:43:35.987 回答
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];
    }]; 

    ...
}
于 2013-10-23T17:04:11.970 回答