我使用代码:
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
我添加
<key>UIViewControllerBasedStatusBarAppearance</key><false/>
in info.plist。
但是现状栏仍然是黑色样式!为什么?
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
,它将起作用。该关键背后的主要思想是,当它是真实的时,应用程序在您的视图控制器代码中查看状态栏样式,以实现preferredStatusBarStyle
(用于状态栏样式)和prefersStatusBarHidden
(如果它应该隐藏此视图控制器的状态栏)。并且,当UIViewControllerBasedStatusBarAppearance
密钥为false时,应用程序会查找目标首选项的General
部分中定义的全局设置(在Xcode中选择项目文件中的项目文件)。
另外,您必须记住,当您的视图控制器位于UINavigationController
或UITabbarController
等容器上时,才能更改状态栏的外观,则必须扩展这些容器(写扩展),并覆盖preferredStatusBarStyle
属性。
您也可以在此上检查此答案。