在开发 iOS App 时,很多应用都要根据当前 App 内容颜色来设置 iOS 系统状态栏 的配色,黑色或者白色——尤其是在 iOS 13 系统支持了黑色模式后。
通常,别人会告诉你这么做:
1 |
UIApplication.shared.statusBarStyle = .default |
但这会触发警告: Deprecated in iOS 9 。那么有没有其他办法呢?有,官方推荐的写法是这样的:
1 2 3 |
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } |
这个要在你的 ViewController 里才可以……但你绝望地发现,它根本没有被调用。
于是你继续搜索……
在你的 Info.plist 里, View controller-based status bar appearance 必须设置为 YES ,否则就只能在 Xcode 的 target 中设置状态栏的黑白配色。
但是…… preferredStatusBarStyle 依旧没有被调用。
这到底是怎么回事?
这实际上是由于 UINavigationController 导致的,由于它通常是 ViewController 里的最高层级,它不会将 preferredStatusBarStyle 请求向下传递,相反,它会根据自身的 UINavigationBar.barStyle 属性来决定系统状态栏到底是黑色还是白色,如果 barStyle 是 .black ,那么系统栏就是 .lightContent 也就是白色;但如果 barStyle 是 .default ,那么系统栏就也是默认的黑色了。
所以,如果你想改变系统栏颜色,在 UINavigationController 下的 ViewController 就需要修改 UINavigationBar.barStyle 而不是重写 preferredStatusBarStyle 。
另外
如果你是在 iOS 13 以上版本的 iOS 中这么做,你会发现系统状态栏还是不变……所以你可能需要在你的 Info.plist 里加上 UIUserInterfaceStyle 字段,并设置值为 Light ,这样可以让你的 App 不配适 iOS 13 的黑色模式——因为如果配适了的话,在黑色模式下,你的系统状态栏将永远是白色,不会变色……
参考文献
本文由 落格博客 原创撰写:落格博客 » iOS 正确设置 status bar style 颜色
转载请保留出处和原文链接:https://www.logcg.com/archives/3343.html