在开发iOS App时,很多应用都要根据当前App内容颜色来设置iOS系统状态栏的配色,黑色或者白色——尤其是在iOS 13系统支持了黑色模式后。
平时,别人会告诉你这么做:
UIApplication.shared.statusBarStyle = .default
但这会触发警告: 不推荐使用 在 iOS 版 9 。 那么有没有其他办法呢? 有,官方推荐的写法是这样的:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
这个要在你的 ViewController 里才可以...... 但你绝望地发现,它根本没有被调用。
于是你继续搜索......
在你的 信息.plist中 里, 视图 控制者-基于 状态 酒吧 出现 必须设置为 YES ,否则就只能在 Xcode 的 target 中设置状态栏的黑白配色。
但是...... preferredStatusBarStyle 依旧没有被调用。
这到底是怎么回事?
这实际上是由于 UINavigationController 导致的,由于它通常是 ViewController 里的最高层级,它不会将 preferredStatusBarStyle 请求向下传递,相反,它会根据自身的 UINavigationBar.barStyle 属性来决定系统状态栏到底是黑色还是白色,如果 barStyle 是 .黑色 ,那么系统栏就是 .lightContent 也就是白色; 但如果 barStyle 是 .默认 ,那么系统栏就也是默认的黑色了。
所以,如果你想改变系统栏颜色,在 UINavigationController 下的 ViewController 就需要修改 UINavigationBar.barStyle 而不是重写 preferredStatusBarStyle 。
另外
如果你是在 iOS 13 以上版本的 iOS 中这么做,你会发现系统状态栏还是不变...... 所以你可能需要在你的 信息.plist中 里加上 UIUserInterfaceStyle 字段,并设置值为 光 ,这样可以让你的 App 不配适 iOS 13 的黑色模式——因为如果配适了的话,在黑色模式下,你的系统状态栏将永远是白色,不会变色......
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论