刚刚下载了新的xCode 10.0,并且发现自iOS 9.0以来旧的statusBarStyle已被弃用。
警告: Setter for 'statusBarStyle' was deprecated in iOS 9.0: Use -[UIViewController preferredStatusBarStyle]
弃用代码:
UIApplication.shared.statusBarStyle = .default
我尝试使用self.preferredStatusBarStyle
,但发现该属性只是一个吸气剂。所以任何人都知道如何设置statusBarStyle
?
我想在一个函数中更改statusBarStyle,用户可以在不同的主题之间切换。例如:
func changeStatusBar(toDarkMode: Bool) {
if toDarkMode {
// Set to light statusBarStyle
} else {
// Set to default
}
}
答案 0 :(得分:28)
答案 1 :(得分:22)
在 swift4 中,您可以在viewDidLoad()
中使用此ViewController
下方的代码块 -
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent
}
答案 2 :(得分:22)
使用您现在使用的相同代码设置darkMode变量,然后在系统预期的计算变量中使用它:
var darkMode = false
override var preferredStatusBarStyle : UIStatusBarStyle {
return darkMode ? .default : .lightContent
}
根据上下文,您可能需要强制刷新屏幕才能使其生效。你可以通过以下电话来做到这一点:
setNeedsStatusBarAppearanceUpdate()
答案 3 :(得分:8)
如果您使用UINavigationController,还可能需要使用以下代码:
extension UINavigationController {
open override var preferredStatusBarStyle: UIStatusBarStyle {
return topViewController?.preferredStatusBarStyle ?? .default
}
}
原因是setNeedsStatusBarAppearanceUpdate()
没有称呼孩子preferredStatusBarStyle
答案 4 :(得分:5)
没有其他建议对我有用。我最终通过以下方式使它起作用:
设置:
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent
}
致电:
setNeedsStatusBarAppearanceUpdate()
答案 5 :(得分:0)
我的解决方案是这样的: 从导航控制器进行扩展:
extension UINavigationController {
open override var preferredStatusBarStyle: UIStatusBarStyle {
if let topViewController = presentedViewController{
return topViewController.preferredStatusBarStyle
}
if let topViewController = viewControllers.last {
return topViewController.preferredStatusBarStyle
}
return .default
}
}
并且如果您的viewController的样式将不同于应用程序的样式,则可以使它
var barStyle = UIStatusBarStyle.lightContent
override var preferredStatusBarStyle: UIStatusBarStyle{
return barStyle
}
让我们说您的应用状态样式为.default
,而您希望此屏幕为.lightContent
因此barStyle将采用.lightContent
作为其默认值,这会将状态栏样式更改为lightContent,然后确保当viewWillDisappear
再次将barStyle更改为应用程序状态栏样式时,本例中为.default
。
这对我有用