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:
- Establezca
UIViewControllerBasedStatusBarAppearance
enYES
en.plist
- En
viewDidLoad
llama aself.setNeedsStatusBarAppearanceUpdate();
- Anular preferredStatusBarStyle
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
- 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
}
}