我使用的是Xcode8.0测试版4。
在以前的版本中,UIViewController具有设置状态栏样式的方法
public func preferredStatusBarStyle() -> UIStatusBarStyle
然而,我发现它在Swift 3中变成了"Get ONLY varaiable“。
public var preferredStatusBarStyle: UIStatusBarStyle { get }
如何提供在我的UIViewController中使用的样式?
发布于 2016-08-03 18:52:21
您可以尝试覆盖返回的值,而不是设置它。该方法被声明为{ get },因此只需提供一个getter:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
如果你有条件地设置它,你将需要调用setNeedsStatusBarAppearanceUpdate()
,这样当你准备好的时候,它就会激活这个改变
发布于 2017-02-02 12:14:24
第一步,您需要在Info.plist
文件中添加一行key:View controller-based status bar appearance
和value NO
。在这之后,在你的控制器中添加两个功能,只有该控制器才会生效:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
UIApplication.shared.statusBarStyle = .lightContent
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.shared.statusBarStyle = .default
}
发布于 2018-01-27 14:50:22
在处理导航栏时,似乎有一个关于状态栏文本颜色的小问题。
如果您希望将.plist条目视图基于控制器的状态栏外观设置为YES
,那么当您有一个彩色导航栏时,它有时将不起作用。
例如:
override func viewWillAppear(_ animated: Bool) {
let nav = self.navigationController?.navigationBar
nav?.barTintColor = .red
nav?.tintColor = .white
nav?.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
setNeedsStatusBarAppearanceUpdate()
}
和
override var preferredStatusBarStyle: UIStatusBarStyle {return .lightContent}
即使您在AppDelegate中设置了以下内容,上面的代码也无法工作:
UIApplication.shared.statusBarStyle = .lightContent
对于那些仍在苦苦挣扎的人来说,显然它会根据导航栏中的样式来判断状态栏是亮还是暗。因此,我设法通过在viewWillAppear中添加以下行来修复此问题:
nav?.barStyle = UIBarStyle.black
当条形图样式为黑色时,它会监听被覆盖的变量。希望这对某些人有帮助:)
https://stackoverflow.com/questions/38740648
复制相似问题