iOS establece correctamente el estilo de la barra de estado

Barra de estado de texto blanco

Barra de estado de texto negro

barra de estado de iOS

Desde iOS 7, iOS ha adoptado un diseño de barra de estado envolvente, y el estilo de la barra de estado es principalmente en blanco y negro. Por ejemplo, las dos aplicaciones de Gift Talk y Jiaxue (disuelta) adoptan estos dos diseños diferentes.

En términos generales, una barra de navegación de fondo oscuro coincidirá con una barra de estado blanca, y una barra de navegación de fondo claro coincidirá con una barra de estado oscura.

Antes de iOS 9, generalmente UIViewControllerBasedStatusBarAppearanceestablecemos la clave en NO en el archivo info.plist del proyecto ,

UIViewControllerBasedStatusBarAppearance

Luego, use el siguiente código en el controlador de vista apropiado para establecer el estilo de la barra de estado:


 
  
  
  1. /// Establecer la barra de estado blanca
  2. [[ UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleLightContent ];
  3. /// Establecer la barra de estado negra
  4. [[ UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleDefault ];

Sin embargo, esta estructura de código interrumpe el ritmo de nuestro control de la barra de estado. Imagine que si el estado de la barra de estado en el proyecto cambia con mucha frecuencia, debe actualizar y restaurar el estado de estilo de la barra de estado en varios ViewControllers. De hecho, todo lo que necesitamos es asociar cada ViewController con el StatusBarStyle correspondiente. No necesitamos modificación global, global significa caos.

Por lo tanto, el método anterior generará una advertencia después de iOS 9 (Xcode 7). Apple ya no recomienda usar el método anterior. Necesitamos anular el +preferredStatusBarStylemétodo del controlador de vista para establecer el estilo de la barra de estado:


 
  
  
  1. // Configurar statusBarStyle no hace nada si su aplicación está usando el sistema de barra de estado basado en UIViewController predeterminado.
  2. @available (iOS, introducido = 2.0 , obsoleto = 9.0 , mensaje = "Usar - [UIViewController favoriteStatusBarStyle]" )
  3. public var statusBarStyle: UIStatusBarStyle
  4. @available (iOS, introducido = 2.0 , obsoleto = 9.0 , mensaje = "Usar - [UIViewController favoriteStatusBarStyle]" )
  5. public func setStatusBarStyle (statusBarStyle: UIStatusBarStyle, animado: Bool)

Por lo tanto, configure rápidamente la UIViewControllerBasedStatusBarAppearanceclave en el archivo info.plist del proyecto en NO (o elimínela), y no olvide setStatusBarStyleeliminar también los elementos de su proyecto . Aquí le mostraremos cómo configurar el estilo de la barra de estado con elegancia.


Caso 1: aplicación de vista única

Cree un nuevo proyecto de aplicación de vista única, establezca el color de fondo del controlador de vista en azul agua y vuelva a escribir las preferredStatusBarStylepropiedades.


 
  
  
  1. anular func viewDidLoad () {
  2. super .viewDidLoad ()
  3. self .view.backgroundColor = UIColor . init (colorLiteralRed: 0.157 , verde: 0.694 , azul: 1 , alpha: 1 )
  4. }
  5. anular var preferidoStatusBarStyle: UIStatusBarStyle {
  6. return .lightContent
  7. }

Barra de estado blanca

¿El efecto luce bien ?.

Caso 2: Ver controlador incrustado en un controlador de navegación

Pero si mi View Controller está en una pila de navegación, la barra de estado se vuelve negra nuevamente:

Ver controlador incrustado en un controlador de navegación

 

La barra de estado es negra nuevamente


Echemos un vistazo a preferredStatusBarStyle()la definición:

 


 
  
  
  1. // Estos métodos controlan los atributos de la barra de estado cuando se muestra este controlador de vista. Se pueden anular en las subclases de controladores de vista para devolver los atributos de la barra de estado deseados.
  2. @disponible (iOS 7.0, *)
  3. open var favoriteStatusBarStyle: UIStatusBarStyle { get } // Por defecto es UIStatusBarStyleDefault

La idea principal es que esta propiedad se puede utilizar para controlar las propiedades de la barra de estado cuando se muestra el controlador de vista. Puede anular esta propiedad calculada en una subclase de UIViewController para devolver las propiedades de la barra de estado que espera.

Entonces, ¿por qué no funciona si recargo este atributo ahora? En realidad, preferredStatusBarStyle()no se llama. Porque el controlador de vista actual está ubicado en un controlador de clase de contenedor. El controlador de contenedores incluye UINavigationVontroller, UITabBarControlleretc. En este caso, el estilo de la barra de estado será administrado por el contenedor, solo necesita recargar y cambiar los atributos en el controlador del contenedor. (El código de la siguiente figura es Swift 2)

Sobrecargue el método preferidoStatusBarStyle () en NavigationController

Resultado correcto

Case3: estilo de interruptor

Podemos encontrarnos con el requisito de que la barra de estado del primer controlador de vista en la pila de navegación sea blanca y la barra de estado del segundo controlador de vista sea negra. El método anterior de controlar las propiedades de la barra de estado en el controlador de la barra de navegación obviamente no cumple con nuestros requisitos. Afortunadamente, el SDK de iOS nos proporciona otra propiedad:


 
  
  
  1. // Anular para devolver un controlador de vista secundario o nulo. Si no es nulo, se utilizarán los atributos de apariencia de la barra de estado de ese controlador de vista. Si es nulo, se usa self. Siempre que cambien los valores de retorno de estos métodos, se debe llamar a -setNeedsUpdatedStatusBarAttributes.
  2. @disponible (iOS 7.0, *)
  3. abrir var childViewControllerForStatusBarStyle: UIViewController? { get }

La idea general es que si el valor de retorno de este método no es nulo, el derecho de control para cambiar las propiedades de la barra de estado se transferirá al controlador que devolvió. Si el valor de retorno es nulo o el método no está sobrecargado, entonces eres responsable de controlar las propiedades de la barra de estado. Siempre que se cambie el estilo de la barra de estado, debe llamar al -setNeedsUpdatedStatusBarAttributesmétodo del controlador . La última oración dice que si desea cambiar el estilo de la barra de estado de vez en cuando en la página actual, primero debe llamar al -setNeedsStatusBarAppearanceUpdatemétodo (le informa al sistema que recupere el UIViewController actual preferredStatusBarStyle).

Para lograr nuestras necesidades, podemos NavigationControllersobrecargar las -childViewControllerForStatusBarStylepropiedades en, ya que devuelve una instancia del controlador de vista, entonces solo necesitamos usar la pila de navegación topViewControllercomo valor de retorno (este método será llamado varias veces, y cada vez ~~ set el estilo de barra de estado ~~ controlador de vista push / pop (se llamará este método), y luego vuelva a cargar los preferredStatusBarStyleatributos en el controlador donde se debe establecer el estilo de la barra de estado .


 
  
  
  1. anular var childViewControllerForStatusBarStyle: UIViewController ? {
  2. return self .topViewController
  3. }

efecto final

Caso 4: Controlador modal actual

Cabe señalar que si se presenta un controlador de vista, generalmente el controlador de vista ignora los preferredStatusBarStyleatributos, y debe establecer dicho atributo antes de que se presente:

vc.modalPresentationCapturesStatusBarAppearance = true

 
  
  

 
  
  
  1. // Esto controla si este controlador de vista asume el control de la apariencia de la barra de estado cuando se presenta en pantalla no completa en otro controlador de vista. Por defecto es NO.
  2. @disponible (iOS 7.0, *)
  3. open var modalPresentationCapturesStatusBarAppearance: Bool



Autor: waylen
link: https: //www.jianshu.com/p/0d4337b2e18a
Fuente: Libro de
Jane Los derechos de autor del libro de Jane están reservados por los autores, se reproducen en cualquier forma, por favor contacte al autor para obtener autorización e indicar la fuente.

Supongo que te gusta

Origin blog.csdn.net/Draven__/article/details/90759054
Recomendado
Clasificación