StatusBarStyle

最近改寫了 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。

comments powered by Disqus