preferredstatusbarstyle color change bar ios swift appdelegate uistatusbar xcode6

ios - color - UIStatusBarStyle no funciona en Swift



status bar background color swift (11)

Swift 3.0

en AppDelegate.swift didFinishLaunchingWithOptions

UIApplication.shared.statusBarStyle = .lightContent

Info.plist

View controller-based status bar appearance -> NO

Swift 2.2

en AppDelegate.swift didFinishLaunchingWithOptions

UIApplication.sharedApplication().statusBarStyle = .LightContent

Info.plist

View controller-based status bar appearance -> NO

Intento cambiar el color de la Barra de estado en mi aplicación Swift a blanco, pero estoy golpeando una pared de ladrillo. Tengo 3 ViewControllers que están incrustados en un NavigationController (¿podría ser ese el problema? Ya he intentado colocar el código en la clase NavigationController). He intentado los dos siguientes códigos en el didFinishLaunchingWithOptions de mi AppDelegate .swift archivo, pero ninguno funcionó.

application.statusBarStyle = .LightContent

y

UIApplication.sharedApplication().statusBarStyle = .LightContent

Todo lo que los doctores tienen que decir al respecto es que UIBarButtonStyle es un Int. Y me dio este fragmento enum que no me ayudó en absoluto con la implicación.

enum UIStatusBarStyle : Int { case Default case LightContent case BlackOpaque }

¿Qué me estoy perdiendo?


En Swift 3, el estilo de la barra de estado ha cambiado a una propiedad calculada en UIViewController que puede sobrescribir de esta manera:

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


En Swift 3.0 puede anular un getter en ViewController para ver la apariencia de la barra de estado basada en el controlador:

override var preferredStatusBarStyle: UIStatusBarStyle { get { return .lightContent } }


En iOS 9, el siguiente (setStatusBarStyle) está en desuso y recibirás una advertencia si sigues ese camino.

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)

Si desea que todos los statusBars cambien en una sola toma, intente agregar lo siguiente a su Info.plist. Esto también hará que la barra de estado de la pantalla de inicio sea blanca. Si bien el código anterior no lo hará.

<key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>


Extraño, usando Swift 3.1 y XC8.2.1, pero todo lo anterior no funcionó.

Lo que hice, es solo

extension UINavigationController { override open var preferredStatusBarStyle: UIStatusBarStyle { get { return .lightContent } } }

Sin lista, sin otras cosas. HTH


No edite su Info.plist. Agregue esto a su ViewController.swift:

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


Para iOS9.xy Xcode7, simplemente coloca esto dentro de AppDelegate.swift :

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { UINavigationBar.appearance().barStyle = .Black }

Esto convertirá automáticamente el estilo de su barra de estado en .Lightcontent para todos los controladores de vista dentro de un UINavigationController.

(Además, elimine la View controller-based status bar appearance de Info.plist para suprimir las advertencias que probablemente esté viendo también).


Paso 1. Agregar a info.plist View controller-based status bar appearance -> NO

Paso 2. Agrega código en el método donde necesitas cambiar el color de la barra de estado:

UIApplication.shared.statusBarStyle = .lightContent //(or .default) setNeedsStatusBarAppearanceUpdate()

Línea de código clave: setNeedsStatusBarAppearanceUpdate()


Tienes dos opciones.

Si desea continuar configurando manualmente el estilo de la barra de estado, continúe haciendo lo que está haciendo, pero deberá agregar la siguiente clave a su archivo info.plist con un valor NO .

Ver la apariencia de la barra de estado basada en el controlador

O bien, si desea seguir utilizando la apariencia de la barra de estado basada en el controlador de visualización, en lugar de establecer el statusBarStyle de la aplicación, anule la propiedad preferredStatusBarStyle en cada controlador de vista para la que desee especificar un estilo de barra de estado.

Swift 3

override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }

Swift 2

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


Tienes que configurar el:

navigationController.navigationBar.barStyle = .black

y el texto aparecerá en blanco


para mí todo lo de arriba no funcionará hasta que agregue:

self.navigationController?.navigationBar.barStyle = .black;

asi que:

  1. Establezca UIViewControllerBasedStatusBarAppearance en YES en .plist
  2. En viewDidLoad llama a self.setNeedsStatusBarAppearanceUpdate();
  3. Anular preferredStatusBarStyle
    override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
  4. En el método anulado, también configuré el navigationBar.barStyle para que sea final
    para contenido ligero :
    override var preferredStatusBarStyle: UIStatusBarStyle { self.navigationController?.navigationBar.barStyle = .black;//or default return .lightContent //or default }
    y para el contenido negro , use el predeterminado

La fuente de here y here .

y si esto no funciona, puede intentar agregar una extension UINavigationController :

extension UINavigationController { override open var preferredStatusBarStyle: UIStatusBarStyle { if let lastVC = self.viewControllers.last { return lastVC.preferredStatusBarStyle } return .default } }