iOS StatusBar 的坑应该都在这儿了

从 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 的显示与隐藏
动态调整 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 样式都将统一

设置 Navigation Bar 的 Style
设置 Navigation Bar 的 Style

方案二

新建一个类继承 NavigationController ,override childViewControllerForStatusBarStyle 返回 self.topViewController

参考链接:

iOS Status Bar 状态栏相关知识
设置app的状态栏样式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容