我使用的代碼:如何控制與代碼的狀態欄風格Swift3.0
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
,我在Info.plist中添加
<key>UIViewControllerBasedStatusBarAppearance</key><false/>
。
但StatusBar仍然是黑色風格!爲什麼?
我使用的代碼:如何控制與代碼的狀態欄風格Swift3.0
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
,我在Info.plist中添加
<key>UIViewControllerBasedStatusBarAppearance</key><false/>
。
但StatusBar仍然是黑色風格!爲什麼?
這不起作用,因爲您在Info.plist
中指定了<key>UIViewControllerBasedStatusBarAppearance</key><false/>
。將其更改爲true
,它會起作用。該關鍵背後的主要思想是,如果它是真的,應用程序會在您的視圖控制器代碼中查找狀態欄樣式,以執行preferredStatusBarStyle
(用於狀態欄樣式)和prefersStatusBarHidden
(用於是否應該隱藏此視圖控制器的狀態欄)。並且,當UIViewControllerBasedStatusBarAppearance
鍵爲false時,應用程序將查找目標首選項的General
部分中定義的全局設置(在xcode的項目導航器中選擇項目文件)。
而且,你要記住,當你的視圖控制器是像UINavigationController
或UITabbarController
容器是,爲了更改狀態欄的外觀,你必須擴展那些容器(寫擴展),並覆蓋preferredStatusBarStyle
財產。
您也可以在SO上查看this的回答。
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
}
你做需要使用Overrite方法可以通過繼承UINavigationController的把控制權返回給視圖控制器在Appdelegate中:'didFinishLaunchingWithOptions'只需放置代碼行:UIApplication.shared.statusBarStyle = .lightContent –
@NitinGohel,請不要暗示已棄用的代碼。在iOS 9.0中不建議使用您建議的編程方式設置狀態欄樣式。雖然它可能適用於當前版本的iOS,但在任何未來的版本中,它可能不適用。 –
真的很重要:) @FahriAzimov然後請張貼您的答案,而不是浪費你的時間:) –