在開發 iOS App 時,很多應用都要根據當前 App 內容顏色來設置 iOS 系統狀態欄 的配色,黑色或者白色——尤其是在 iOS 13 系統支持了黑色模式後。
平時,別人會告訴你這麼做:
1 |
UIApplication.shared.statusBarStyle = .default |
但這會觸發警告: 不推薦使用 在 iOS版 9 。那麼有沒有其他辦法呢?有,官方推薦的寫法是這樣的:
1 2 3 |
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 的黑色模式——因為如果配適了的話,在黑色模式下,你的系統狀態欄將永遠是白色,不會變色……
參考文獻
本文由 落格博客 原創撰寫:落格博客 » iOS 正確設置 status bar style 顏色
轉載請保留出處和原文鏈接:https://www.logcg.com/archives/3343.html