[英]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的項目導航器中選擇項目文件)。
另外,還必須記住,當視圖控制器位於UINavigationController
或UITabbarController
類的容器上時,為了更改狀態欄的外觀,必須擴展這些容器(寫擴展名),並重寫preferredStatusBarStyle
屬性。
您也可以在SO上檢查此答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.