最近改寫了 StatusBarStyle 的控制方式,從 iOS 9 之前是使用
UIApplication.shared.statusBarStyle = .default
並在 info.plist 的 View controller-based status bar appearance 欄位設為 NO。 而後來則改為覆寫 preferredStatusBarStyle 的方式,就不用在 viewWillAppear / viewWillDisappear 的時候手動控制 StatusBarStyle。 首先先確認 info.plist 之中 View controller-based status bar appearance 是為 YSE, 代表我們是透過 View controller-based 的方式來更改 status bar style。
override var preferredStatusBarStyle: UIStatusBarStyle {
return .default
}
而配合 UINavigationController 的使用,可以以 Subclass 或是 Extension 的方式來實作, 這就得看專案需求了。
Subclass
在 BaseNavigationController 裏頭,利用 childForStatusBarStyle 回傳要呼叫哪個 UIViewController 的 preferredStatusBarStyle
override var childForStatusBarStyle: UIViewController? {
return topViewController
}
這樣每當 UINavigationController 畫面在切換時,便會將 topViewController 叫出來問問它 preferredStatusBarStyle 要什麼樣式。
Extension
我們透過 extension UINavigationController 的方式也可以達到一樣的效果
extension UINavigationController {
override open var childForStatusBarStyle: UIViewController? {
return topViewController
}
}
如此就不用為了 childForStatusBarStyle 來多寫一個 subclass。