preferredStatusBarStyle 和 UIApplication
在几个月前或者更早之前,本人一直使用
[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];
的方式来设置 statusBar 的颜色效果,但自从出现了下方图片中的警告后,果断替换成用 preferredStatusBarStyle
来设置 statusBar。
按住 command 点击方法
preferredStatusBarStyle
查看 API:preferredStatusBarStyle
方法在 iOS 7 就有了。要使用这个方法,需要在 info.plist 里设置 View controller-based status bar appearance
为 YES,之后在对应的 viewController 内设置:
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
preferredStatusBarStyle
会在页面显示前,或者说在生命周期 viewDidLoad
和 viewWillAppear
方法之前调用一次,如果需要在一个 viewController 中动态改变 statusBarStyle 或者 隐藏/显示 statusBar( prefersStatusBarHidden
),使用
[self setNeedsStatusBarAppearanceUpdate];
来调用一次 preferredStatusBarStyle
和 prefersStatusBarHidden
。
preferredStatusBarStyle 和 navigationController
有的同学在 viewController 中写了 preferredStatusBarStyle
,却没有调用,这是因为如果 viewController 有一个 navigationController,那 viewController 在显示或者调用了 setNeedsStatusBarAppearanceUpdate
时便不会进入自己的 preferredStatusBarStyle
方法里,而是先进入 navigationController 的 preferredStatusBarStyle
中。此时如果需要 viewController 的有效,需要在 navigationController 中加上
- (UIViewController *)childViewControllerForStatusBarStyle {
return self.topViewController;
}
这样就会以当前 navigationController.topViewController
的 preferredStatusBarStyle
返回值作为应该显示的 statusBarStyle。
preferredStatusBarStyle 和 runtime
其实 preferredStatusBarStyle
与 runtime 结合食用效果更佳(适用于大部分页面 statusBarStyle 一致,小部分需要调整),这样就不需要在每个需要调整的页面都写一次 preferredStatusBarStyle
,在开发迭代过程中也会方便很多,记住 ,DRY 原则。
总结
欢迎交流~
补充代码地址。