iOS 正确设置 status bar style 颜色

在开发 iOS App 时,很多应用都要根据当前 App 内容颜色来设置 iOS 系统状态栏 的配色,黑色或者白色——尤其是在 iOS 13 系统支持了黑色模式后。

通常,别人会告诉你这么做:

但这会触发警告: Deprecated in iOS 9 。那么有没有其他办法呢?有,官方推荐的写法是这样的:

这个要在你的 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

About the Author

R0uter

如非声明,本人所著文章均为原创手打,转载请注明本页面链接和我的名字。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注