隐藏/显示statusBar(iOS 7.0+)
-
全局隐藏/显示状态栏
- 在info.plist中添加
View controller-based status bar appearance
,并将value设为NO,状态栏的隐藏/显示受到全局控制。 - General-Deployment Info 中勾选或取消勾选
Hide stauts bar
选项,即可隐藏或显示状态栏,此时无法通过代码中控制状态栏
- 在info.plist中添加
-
通过代码动态地隐藏/显示状态栏
在info.plist中添加
View controller-based status bar appearance
,并将value设为YES,或删除View controller-based status bar appearance
字段,系统默认为可通过代码动态地隐藏/显示状态栏。-
在需要更改status bar隐藏状态的页面重载
- (BOOL)prefersStatusBarHidden
方法即可- (BOOL)prefersStatusBarHidden { return YES; }
如果在当前页面动态的更改状态栏隐藏/显示状态,需要
[self setNeedsStatusBarAppearanceUpdate];
来通知系统状态栏要改变。
调节statusBar style
- 全局设置statusBar style
在info.plist中添加Status bar style
,将value设为UIStatusBarStyleLightContent
或者UIStatusBarStyleDefault
即可。 - 动态调节statusBar style
- 在info.plist中添加
View controller-based status bar appearance
,并将value设为YES - 在需要更改status bar隐藏状态的页面重载
- (UIStatusBarStyle)preferredStatusBarStyle
方法即可- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleDefault;//黑色字体 //return UIStatusBarStyleLightContent;//亮色字体 }
- 如果在当前页面动态的更改状态栏样式,需要
[self setNeedsStatusBarAppearanceUpdate];
来通知系统状态栏要改变。 - 如果当前的页面在
UINavigationController
中,还需要新建一个子类,继承UINavigationController
,在子类中重载- (UIViewController *)childViewControllerForStatusBarStyle
方法即可。
原因:当需要更改status bar syle时,系统会首先调用- (UIViewController *)childViewControllerForStatusBarStyle { return self.topViewController; }
application.window.rootViewController
的- (UIStatusBarStyle)preferredStatusBarStyle
方法,如果此时的rootViewController
为UINavigationController
,那么当前的viewController
根本未被调用,因此通过- (UIViewController *)childViewControllerForStatusBarStyle
通知系统去调用rootViewController.topViewController
中的preferredStatusBarStyle
方法。
- 在info.plist中添加