如何在swift 2 / iOS 9中正确地更改状态栏的样式?

我试图改变我的状态栏的风格。 .Light但我在swift 1.2中实现的以前的代码似乎不工作了..这是代码:

 override func viewDidLoad() { super.viewDidLoad() UIApplication.sharedApplication().statusBarStyle = .LightContent } 

现在我有我View controller-based status bar appearance info.plist设置为YES,并阅读UIKit文档,这将取消任何statusBarStyle更改并保持默认。 但是,当我更改设置为“NO”,并更改statusBarStyle,我得到这个<Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable <Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable在我的debugging器中<Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable 。那么这是Xcode中的错误吗? 因为要改变状态栏的风格,你必须将info.plist设置改为NO,但是当这种情况发生的时候..错误

苹果已经添加了在部署信息中更改状态栏样式的function。 只需select“轻”。 Xcode的屏幕截图

同时在Info.plist中将View controller-based status bar appearance键设置为NO

信息plist

我一直这样做。

 class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } //Changing Status Bar override func preferredStatusBarStyle() -> UIStatusBarStyle { //LightContent return UIStatusBarStyle.LightContent //Default //return UIStatusBarStyle.Default } } 

它适用于任何迅速的2.x版本。 这要求您将Info.plist文件中View controller-based status bar appearance设置为YES

部署信息的变化可以工作,但是尽pipe如此,您还是需要添加“基于视图控制器的状态栏外观”键来将plist文件设置为NO。

您仍然可以在视图控制器中使用preferredStatusBarStyle

第1步:在info.plist中将ViewControllerBasedStatusBarAppearance设置为YES。 第2步:将此代码添加到您想要编辑的ViewController:

 override func preferredStatusBarStyle() -> UIStatusBarStyle { return UIStatusBarStyle.LightContent } 

***提示:它似乎只在ViewDidLoad(),didReceiveMemoryWarning()函数之外工作。

Swift 3只需在info.plist添加View controller-based status bar appearanceNO ,然后将其添加到ViewController位置:

 UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent 

你也可以在AppDelegate中添加这个。 如果你想改变它在应用程序中的每个ViewController,而不必为每个其他VC不同,这个选项是更好的。

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { application.statusBarStyle = UIStatusBarStyle.LightContent // instead of // UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: false) // which gives warning about deprecation in iOS 9 return true } 

看起来这是Xcode 7.0中的一个bug。 我也得到Error>: CGContextSaveGState: invalid context 0x0. 设置View controller-based status bar appearance时出错

现在我只是覆盖每个视图控制器的状态栏颜色。

 override func preferredStatusBarStyle() -> UIStatusBarStyle { return .LightContent } 

您可以在部署信息中select“light”,但是您还需要添加“基于视图控制器的状态栏外观”并将其设置为NO。

这里试试这可能会帮助你

首先转到info.plist文件,并将此“基于视图控制器的状态栏外观”添加为键,并将该值设置为NO

这里下面显示的图像 在这里输入图像说明

之后来到AppDelegate.swift文件并通过这个UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent代码行

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool{ UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent return true } 

喜欢这个

对于swift 3重写preferredStatusBarStylevariables使用这个:

  override var preferredStatusBarStyle: UIStatusBarStyle{ return .lightContent } 

现有的答案是很好的,但现在有了新的更新有点不同!

override var现在,而不是override func任何人困惑 – 要点仍然是一样的,你仍然需要改变你的'Info.plist':

 override var preferredStatusBarStyle: UIStatusBarStyle { //LightContent return UIStatusBarStyle.lightContent //Default //return UIStatusBarStyle.default } 

如果您想要在应用程序中随时更改它,可以使用前面提到的覆盖preferredStatusBarStyle()

只要确保在调用preferredStatusBarStyle()之后调用setNeedsStatusBarAppearanceUpdate() preferredStatusBarStyle() ,就可以通知IOS。