簡體   English   中英

如何在Swift3.0中使用代碼控制StatusBar樣式

[英]How to control the StatusBar style with code in Swift3.0

我使用的代碼:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return UIStatusBarStyle.lightContent
}

然后我添加

<key>UIViewControllerBasedStatusBarAppearance</key><false/>

在Info.plist中。

但是StatusBar仍然是黑色樣式! 為什么?

SWIFT 3

UINavigationController重寫視圖控制器的首選狀態欄樣式。 您可以通過子類化UINavigationController,將控制權交還給視圖控制器:

class BaseNavigationController: UINavigationController {

var statusBarStyle: UIStatusBarStyle?

override var preferredStatusBarStyle: UIStatusBarStyle {
    return statusBarStyle ?? .default
}

然后,您可以在視圖控制器中設置statusBarStyle屬性:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    if let navigationController = navigationController as? BaseNavigationController {
        navigationController.statusBarStyle = preferredStatusBarStyle
    }
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .default // any style you want
}

它不起作用,因為您在Info.plist中指定了<key>UIViewControllerBasedStatusBarAppearance</key><false/> 將該鍵更改為true ,它將起作用。 該鍵背后的主要思想是,當它為true時,應用程序會在視圖控制器代碼中查找狀態欄樣式,以實現preferredStatusBarStyle (用於狀態欄樣式)和prefersStatusBarHidden (例如,是否應為此視圖控制器隱藏狀態欄)。 並且,當UIViewControllerBasedStatusBarAppearance鍵為false時,應用程序將在目標首選項的“ General部分中查找定義的全局設置(在xcode的項目導航器中選擇項目文件)。

另外,還必須記住,當視圖控制器位於UINavigationControllerUITabbarController類的容器上時,為了更改狀態欄的外觀,必須擴展這些容器(寫擴展名),並重寫preferredStatusBarStyle屬性。

您也可以在SO上檢查答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM