2013-10-22 85 views
3

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

Status bar is initially hidden 

View controller-based status bar appearance 

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

我已经尝试设置

- (BOOL)prefersStatusBarHidden 
{ 
    return YES; 
} 

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

在视图控制器,但没有作品。有任何想法吗?

预先感谢您:)

UPDATE

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

解决问题
- (BOOL)prefersStatusBarHidden 
{ 
    return YES; 
} 

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

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

+0

正确的解决方案:http://stackoverflow.com/a/21034908/294884 – Fattie

回答

7

该密钥加入您的info.plist

UIViewControllerBasedStatusBarAppearance = NO 
2

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]; 
    }]; 

    ... 
}