override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent;
}
使用上述代码在任何ViewController中为特定的ViewController设置状态栏颜色为白色,在iOS8中对我来说是行不通的。有什么建议吗?使用UIApplication。shared应用方法,在信息中需要更改后颜色更改。Plist为整个应用程序。
// Change the colour of status bar from black to white
UIApplication.sharedApplication().statusBarStyle = .LightContent
我怎么能改变一些必要的和特定的视图控制器的状态栏颜色?
在我的情况下,我使用故事板来组织我的视图控制器。我想改变所有的状态栏风格。
你可以在下面的图片中看到。
Stars View Controller是一个CPBaseNavigationController,而CPBaseNavigationController是UINavigationController的子类。
我试着做下面的步骤:
在AppDelegate.swift func didFinishLaunchingWithOptions中添加
//更改状态栏颜色
UIApplication.sharedApplication()。statusBarHidden = false
UIApplication.sharedApplication()。statusBarStyle = .LightContent
但没有效果。
在StoryBoard中,找到Base Tab BarController(上图)。选择属性检查器,将状态条属性更改为轻内容。太糟糕了,没有效果。
最后我明白了。在我的自定义导航控制器CPBaseNavigationController中添加func preferredStatusBarStyle
override func preferredStatusBarStyle() -> UIStatusBarStyle {
返回.LightContent
}
它工作得很好!
此外,statusBarStyle在9.0中已弃用,你可以使用-[UIViewController preferredStatusBarStyle]。
(截至2020年6月10日)
Swift 5(不编辑。plist文件)
如果你正在使用故事板,转到导航控制器,选择导航栏,单击属性检查器,然后更改样式。如果你需要浅色内容(白色状态栏),设置它除了默认设置样式黑色,如果你想要深色内容(黑色状态栏),设置它默认。
默认的(UIBarStyleDefault)导致前景UIStatusBarStyleDefault状态栏为黑色。UIBarStyleBlack会给出一个uistatusbarstyelightcontent状态栏。
编程
let nav = UINavigationController(rootViewController: rootViewController)
nav.navigationBar.barStyle = .default //gives you dark Content status bar
nav.navigationBar.barStyle = .black //gives you light content status bar
没有导航栏(编辑。plist)
添加UIViewControllerBasedStatusBarAppearance /基于视图控制器的状态栏外观到你的信息。Plist, set value为true。
重写控制器中的preferredStatusBarStyle属性
class ViewController: UIViewController {
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent
}
}
斯威夫特4.2
嘿,我想分享一个解决方案,我从格雷格·格鲁米特的一篇关于这个神秘主题的好文章中得到的。
步骤1
正如其他人所提到的,添加到你的PLIST
View controller-based status bar appearance YES
步骤2在RootViewcontroller中添加如下
var statusBarHidden: Bool = false {
didSet(newValue) {
UIView.animate(withDuration: 0.1) {
self.setNeedsStatusBarAppearanceUpdate()
}
}
}
override var prefersStatusBarHidden: Bool {
return statusBarHidden
}
var vcStatusBarStyle: UIStatusBarStyle = .default {
didSet(newValue) {
UIView.animate(withDuration: 0.1) {
self.setNeedsStatusBarAppearanceUpdate()
}
}
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return vcStatusbarStyle
}
当更新属性statusBarHidden或vcStatusBarStyle时,它将调用setNeedsStatusBarAppearanceUpdate(),并将更新状态栏与prefersStatusBarHidden或preferredStatusBarStyle的新值。在我的情况下,我必须为容器视图控制器更新这些属性,这是可见的子视图控制器的父。我使用一个简单的委托方法做到了这一点。
protocol MainViewControllerDelegate {
func updateStatusBarStyle(statBarStayle: UIStatusBarStyle)
func toggleStatusBar(visable: Bool)
}
当然,当实例化childViewController(Visible VC)时,不要忘记将MainViewcontroller(Container VC)设置为它的委托。我有时会。:)
childViewController.delegate = self
然后在childViewController中,当需要更新状态栏时,我只调用委托方法。
self.delegate?.updateStatusBarStyle(statBarStayle: .default)
如上所述,Graig Grummitt详细介绍了这个解决方案,也与UINavigationControllers一起工作。链接这里:状态栏的神秘案例