最近在學習Swift的時候,重新梳理了一遍修改狀態欄的知識點
狀態的的修改分為兩個方法:
? ? ?1. 以UIAPPlication為準 設置?UIApplication.shared.statusBarStyle 的值來確定狀態欄的風格,UIApplication.shared.statusBarStyle 為枚舉:.default .lightContent(iOS 7.0) .darkContent(iOS 13.0) 前提是在plist.info文件中設置View controller-based status bar appearance 的值為false
? ? 2. 以控制器中重寫父類的preferredStatusBarStyle屬性的get方法為準 來設置狀態欄的風格,返回值為?UIStatusBarStyle類型的枚舉,枚舉值分別是: .default ?.lightContent(iOS 7.0) .darkContent(iOS 13.0) , 前提是在plist.info文件中設置?View controller-based status bar appearance 的值為true
以上dackContent的值為iOS13 暗黑風格新添加的屬性. 如果不需要適配暗黑屬性,可在info文件中設置?User Interface Style 的值為 Light
動態設置狀態欄的風格:
第一種方法 可以直接設置設置UIApplication.shared.statusBarStyle即可。
第二種方法,在父類變量preferredStatusBarStyle的get方法中 返回一個控制狀態欄的變量,在需要改變風格的時候 改變控制狀態欄變量的值,然后調用setNeedsStatusBarAppearanceUpdate()方法,這個方法調用之后 系統會自動再去讀取preferredStatusBarStyle變量返回的值,即可設置狀態欄的風格。
在有導航控制器中,使用preferredStatusBarStyle修改狀態欄風格
? ? 此時要注意,需要重寫NavigationController的childForStatusBarStyle和childForStatusBarHidden方法,才能夠在viewController中設置生效:
extension UINavigationController {
? ? open override var childForStatusBarStyle: UIViewController? {
? ? ? ? return viewControllers.last
? ? }
? ? open override var childForStatusBarHidden: UIViewController? {
? ? ? ? return viewControllers.last
? ? }
}