¿Cómo cambio correctamente mi estilo de barra de estado en swift 2 / iOS 9?

Estoy intentando cambiar el estilo de mi barra de estado a .Light pero el código anterior que implementé en Swift 1.2 parece no funcionar más … aquí está el código:

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

ahora tengo mi configuration de info.plist de la View controller-based status bar appearance en YES, y al leer el documento UIKit, esto anulará cualquier cambio de statusBarStyle y lo mantendrá en el valor pnetworkingeterminado. Sin embargo, cuando cambio la configuration a 'NO' y cambio el statusBarStyle, obtengo este <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 en mi depurador. ¿Entonces este es un error en Xcode? porque para cambiar el estilo de la barra de estado debe cambiar la configuration info.plist a NO, pero cuando eso sucede … error

Apple agregó la capacidad de cambiar el estilo de barra de estado en la información de implementación. Simplemente elija "Luz". ScreenShot de Xcode

También configure la tecla de vista de la View controller-based status bar appearance en NO en Info.plist

info plist

Siempre lo hice de esta manera.

 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 prefernetworkingStatusBarStyle() -> UIStatusBarStyle { //LightContent return UIStatusBarStyle.LightContent //Default //return UIStatusBarStyle.Default } } 

Funciona en cualquier versión 2.x rápida. Esto requiere que configure la View controller-based status bar appearance en su file Info.plist en YES .

El cambio en la información de implementación funciona, pero a pesar de ello, debe agregar la key "Ver la barra de estado basada en el controller" para plegar el file configurándolo en NO.

Todavía puede usar prefernetworkingStatusBarStyle en su controller de vista:

paso 1: en el file info.plist, configure ViewControllerBasedStatusBarAppearance en YES. Paso 2: agregue este código al ViewController que desea editar:

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

*** Consejo: parece que solo funciona fuera de las funciones ViewDidLoad (), didReceiveMemoryWarning ().

Swift 3 simplemente agrega la View controller-based status bar appearance con el valor NO a info.plist y luego agrega a ViewController donde quieras:

 UIApplication.shanetworking.statusBarStyle = UIStatusBarStyle.lightContent 

También puede agregar esto en AppDelegate. Esta opción es mejor si desea cambiarla por cada ViewController en la aplicación y no tener que hacerlo diferente para cada otro VC.

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

Parece que es un error en Xcode 7.0. También Error>: CGContextSaveGState: invalid context 0x0. el Error>: CGContextSaveGState: invalid context 0x0. error al configurar View controller-based status bar appearance

Por ahora, solo estoy anulando el color de la barra de estado en cada controller de vista.

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

Puede elegir "light" en la información de deployment, pero también debe agregar "Apariencia de la barra de estado basada en el controller de visualización" y configurarlo en NO.

Aquí testing esto podría ayudarte

Primero, vaya al file info.plist y agregue esta "Visualización de la barra de estado basada en el controller" como una key y establezca el valor como NO

aquí a continuación se muestra en la image introduzca la descripción de la imagen aquí

después de esto, ven al file AppDelegate.swift y pasa esta UIApplication.shanetworkingApplication().statusBarStyle = UIStatusBarStyle.LightContent línea de código en

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

Me gusta esto

Para swift 3 anular la variable prefernetworkingStatusBarStyle, use esto:

  override var prefernetworkingStatusBarStyle: UIStatusBarStyle{ return .lightContent } 

Las respuestas existentes son geniales, ¡pero ahora es un poco diferente con las nuevas actualizaciones!

override var ahora en lugar de override func para cualquiera confundido: la esencia sigue siendo la misma y todavía necesita cambiar su 'Info.plist':

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

Si desea cambiarlo de vez en cuando dentro de su aplicación, puede usar las anulaciones prefernetworkingStatusBarStyle() como se mencionó anteriormente.

Solo asegúrese de que también llame a setNeedsStatusBarAppearanceUpdate() después de llamar a prefernetworkingStatusBarStyle() , para informar a IOS al respecto.