从 iOS 7 起,Apple 就一直在 UIStatusBar 上折腾,感觉每个版本都在更新 API。
最近一个项目也需要折腾 StatusBar,躲不过,只能正面迎敌!
显示/隐藏 StatusBar
原来觉得显示隐藏 StatusBar 是一件很简单的事情,却没想到掉进一个大坑里。
大坑在另外一篇文章里说吧,这里主要讲 StatusBar 的定制。iOS Adjust Scroll View Insets 补坑之路
全局隐藏 StatusBar
如果要全局隐藏 StatusBar,做以下两个设置即可
- Info 中 [View controller-based status bar appearance] 设置为 NO
- General-Deployment Info 中勾选 [Hide stauts bar]
动态显示/隐藏 StatusBar
- Info 中 [View controller-based status bar appearance] 设置为 YES(这个属性默认为 YES,所以也可以不去配置)
- override
prefersStatusBarHidden
方法
参考下面的代码,在不同时间点调整 StatusBar 的显示与隐藏
还是无法隐藏 StatusBar?
我想你一定是 present 了一个 ViewController,所以请在 viewDidLoad
方法中设置 self.modalPresentationCapturesStatusBarAppearance = true
试看看,具体原因,看这个方法的描述就很清楚了
调整 StatusBar 的样式(黑或白)
如果要动态定制 StatusBar 的样式,
- Info 中 [View controller-based status bar appearance] 设置为 YES
- 在 ViewController 中
viewDidLoad
调用self.setNeedsStatusBarAppearanceUpdate()
- 在 ViewController 中 override
preferredStatusBarStyle
返回你需要的样式
但是这样绝大部分都是无法生效的,具体原因看文末的链接,我就不摘抄了
解决方案有两个:
方案一
设置 Navigation Bar 的 Style。这样,所有该 NavigationController 下的 ViewController 的 StatusBar 样式都将统一
方案二
新建一个类继承 NavigationController
,override childViewControllerForStatusBarStyle
返回 self.topViewController