iOS 正確設置 status bar style 顏色

在開發 iOS App 時,很多應用都要根據當前 App 內容顏色來設置 iOS 系統狀態欄 的配色,黑色或者白色——尤其是在 iOS 13 系統支持了黑色模式後。

平時,別人會告訴你這麼做:

但這會觸發警告: 不推薦使用 在 iOS版 9 。那麼有沒有其他辦法呢?有,官方推薦的寫法是這樣的:

這個要在你的 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

關於作者

R0uter

如非聲明,本人所著文章均為原創手打,轉載請註明本頁面鏈接和我的名字。