我使用代码:
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
我添加
<key>UIViewControllerBasedStatusBarAppearance</key><false/>
在Info.plist中。
但StatusBar仍然是黑色风格!为什么呢?
答案 0 :(得分:2)
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
}
答案 1 :(得分:1)
它无效,因为在Info.plist
中您指定了<key>UIViewControllerBasedStatusBarAppearance</key><false/>
。将密钥更改为true
,它就可以正常工作。该关键背后的主要思想是,如果确实如此,应用程序会在您的视图控制器代码中查找状态栏样式,以实现preferredStatusBarStyle
(状态栏样式)和prefersStatusBarHidden
(对于如果它应该隐藏此视图控制器的状态栏)。并且,当UIViewControllerBasedStatusBarAppearance
键为false时,应用程序将查找目标首选项的General
部分中定义的全局设置(在xcode中选择项目导航器中的项目文件)。
此外,您必须记住,当您的视图控制器位于UINavigationController
或UITabbarController
等容器上时,为了更改状态栏外观,您必须扩展这些容器(写入扩展名),并覆盖preferredStatusBarStyle
属性。
您也可以在SO上查看this回答。