[英]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.