studio - He encontrado cuatro formas diferentes de cambiar la barra de estado de iOS en XCode. ¿Por qué hay tantos y cuáles son las diferencias?
testflight tutorial (1)
Opción 1
Esto no hace nada porque es solo una métrica simulada. Puede configurarlo en el constructor de interfaz, pero las métricas simuladas simplemente se simulan y no se aplican en tiempo de ejecución.
opcion 2
Esta opción evita que los controladores de vista individuales configuren la apariencia de la barra de estado (debido a la configuración Info.plist) y depende de un conjunto de colores predeterminado en la configuración de implementación, pero ese valor se puede cambiar en tiempo de ejecución (ver opción 3).
Opción 3
Al igual que la opción 2, esta opción evita que los controladores de vista individuales configuren la apariencia de la barra de estado (debido a la configuración de Info.plist), pero a diferencia de la opción 2, configuramos dinámicamente el color en tiempo de ejecución. Podemos hacer esto solo en el delegado de la aplicación en el lanzamiento ... o podemos cambiarlo en otros momentos. Tal vez tenemos un modo nocturno como la aplicación Google Maps, o tal vez estamos dejando que el usuario configure sus propios colores de tema en alguna parte.
Opción 4
Si está incrustado en un UINavigationController, necesitará subclase UINavigationController y reemplazar "preferredStatusBarStyle ()" aquí.
Es posible que te falte un paso, que se describe aquí . En viewDidLoad
, intente especificar que desea la oportunidad de establecer la barra de estado.
override func viewDidLoad() {
super.viewDidLoad()
setNeedsStatusBarAppearanceUpdate()
}
En cuanto a por qué hay diferentes enfoques para aparentemente lo mismo, primero debemos darnos cuenta de que estos no son en realidad la misma cosa.
De nuevo, desglosémoslo.
- La opción 1 no es un cambio de tiempo de ejecución, por lo que realmente no es interesante para nosotros.
- Las opciones 2 y 3 son casi lo mismo.
- La opción 4 es diferente de la opción 2 y 3.
¿Por qué tenemos su opción 2/3 y su opción 4?
Debido a que en algunas aplicaciones, es posible que desee el mismo color de barra de estado para cada controlador de vista en su aplicación, pero ese color de barra de estado puede ser diferente en función de alguna configuración.
Considere, por ejemplo, la aplicación Google Maps. Por la noche, la aplicación se pone negra y la barra de estado debe aparecer en blanco, pero en el día, la aplicación es blanca y la barra de estado debe ser negra. Es lo mismo para cada controlador de vista, por lo que el código para establecer el color debe implementarse en un solo lugar (sin requerir que todos los controles de vista hereden de la misma matriz base). Para esto, es probable que deseemos su opción 2/3.
Pero considere una aplicación que tenga controles de vista de diferentes colores, donde algunos de ellos se ven mejor con una barra de estado blanca y otros se ven mejor con un negro. Para este enfoque, queremos su opción 4 y deje que cada controlador de vista especifique individualmente de qué color debe ser la barra de estado.
En resumen, su opción 2/3 es una configuración de barra de estado global que se aplica sin importar dónde se encuentre en la aplicación, mientras que la opción 4 es una configuración local, por VC.
He intentado cambiar el color de la barra de estado en mi aplicación Swift, y he identificado cuatro formas de hacerlo en XCode. Sin embargo, solo he podido utilizar con éxito el método 3:
1. Métricas simuladas (solo para la visualización de guiones gráficos)
2. Cambie en General-> Información de implementación-> Estilo de barra de estado
Asegúrese de que la siguiente configuración de Info.list esté configurada en "NO":
View controller-based status bar appearance : NO
Seleccione "Luz" o "Predeterminado" en el cuadro desplegable aquí:
General->Deployment Info->Status Bar Style
3. Establecerlo manualmente
Asegúrese de que la siguiente configuración de Info.plist esté establecida en "NO":
View controller-based status bar appearance : NO
Inserte el siguiente código (generalmente en didFinishLaunchingWithOptions):
UIApplication.sharedApplication().statusBarStyle = .LightContent
4. Reemplazar "preferredStatusBarStyle ()"
Asegúrese de que exista la siguiente propiedad Info.plist y esté establecida en "SÍ":
View controller-based status bar appearance : YES
A continuación, agregue el siguiente código al UIViewController (o clase derivada) que se establece para su ViewController en Storyboard:
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
Mi comprensión actual
Simulated Metrics es solo para mostrar y no proporciona ningún cambio real durante el tiempo de ejecución. Creo que configurar manualmente y cambiar la configuración en la pestaña general probablemente haga lo mismo debajo del capó, pero no estoy seguro. Me imagino que también hay una manera de establecer esta propiedad directamente para los controladores de vista individuales.
Pregunta
Por alguna razón, el único método que realmente me ha funcionado es el método 3, que se establece manualmente. Ninguno de los otros métodos proporciona ningún cambio. Personalmente, preferiría anular en una clase derivada, así que tengo un lugar central para mis estilos compartidos de UIViewController.
¡Cualquier ayuda es muy apreciada!