2017-03-09 62 views
0

我使用的代碼:如何控制與代碼的狀態欄風格Swift3.0

override var preferredStatusBarStyle: UIStatusBarStyle { 
    return UIStatusBarStyle.lightContent 
} 

,我在Info.plist中添加

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

但StatusBar仍然是黑色風格!爲什麼?

+0

你做需要使用Overrite方法可以通過繼承UINavigationController的把控制權返回給視圖控制器在Appdelegate中:'didFinishLaunchingWithOptions'只需放置代碼行:UIApplication.shared.statusBarStyle = .lightContent –

+0

@NitinGohel,請不要暗示已棄用的代碼。在iOS 9.0中不建議使用您建議的編程方式設置狀態欄樣式。雖然它可能適用於當前版本的iOS,但在任何未來的版本中,它可能不適用。 –

+0

真的很重要:) @FahriAzimov然後請張貼您的答案,而不是浪費你的時間:) –

回答

1

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

而且,你要記住,當你的視圖控制器是像UINavigationControllerUITabbarController容器是,爲了更改狀態欄的外觀,你必須擴展那些容器(寫擴展),並覆蓋preferredStatusBarStyle財產。

您也可以在SO上查看this的回答。

1

SWIFT 3

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 
}