如何在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“轻”。
同时在Info.plist
中将View controller-based status bar appearance
键设置为NO
我一直这样做。
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 appearance
值NO
,然后将其添加到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。