隐藏/显示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中添加