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。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s