Necesito actualizar el estilo de la barra de estado en cada controlador de vista en función del color de fondo (lo que UINavigationController está haciendo automáticamente).

He probado todas las opciones descritas en stackoverflow (View controller-based status bar appearance en info.plist establecido en YES ), pero ninguna funcionó para mí.

Estoy usando Xcode 10 beta 6 y Swift 4.2, dirigido a iOS 12.

21
Tomáš Pánik 8 sep. 2018 a las 21:15

5 respuestas

La mejor respuesta

Establezca View controller-based status bar appearance en NO en info.plist y anule preferredStatusBarStyle en cada controlador de vista de la siguiente manera:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Y llame a setNeedsStatusBarAppearanceUpdate() en su controlador de vista (en viewDidLoad() por ejemplo).

27
ielyamani 9 sep. 2018 a las 10:30

Swift 4.2, iOS 12

View controller-based status bar appearance ahora debe establecerse en YES en info.plist ya que UIKit ya no quiere que editemos el estilo de la barra de estado a través de UIApplication.shared: el estilo de la barra de estado ahora se basa en el controlador de vista .

Luego, si desea que el cambio se aplique a nivel de aplicación, simplemente anule preferredStatusBarStyle en el controlador de vista de contenedor apropiado (idealmente la raíz) ...

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

... y esto se propagará a todos los controladores de vista. Y si desea editar el estilo de la barra de estado por controlador de vista, aplique esta anulación por controlador de vista.

Si el estilo de la barra de estado cambia durante el tiempo de ejecución, debe llamar a setNeedsStatusBarAppearanceUpdate() (desde cualquier lugar del controlador de vista de contenedor / raíz o ese controlador de vista específico), de lo contrario no es necesario.

26
bsod 21 sep. 2018 a las 16:26

Finalmente, lo que funcionó para mí:

Añadir a Info.plist:

View controller-based status bar appearance : YES

Para cada ViewController, agregue viewDidLoad () y viewDidAppear ():

self.setNeedsStatusBarAppearanceUpdate()

A) Para la barra de estado de color oscuro, agregue a ViewController:

    override var preferredStatusBarStyle: UIStatusBarStyle {
    return .default
}

B) Para la barra de estado de color blanco, agregue a ViewController:

    override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
1
Anton Eregin 13 ago. 2019 a las 19:58

Si está envuelto en un controlador de navegación, necesitará esto:

final class LightNavigationController: UINavigationController {
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}
1
thexande 14 sep. 2019 a las 19:19

Si tiene View controller-based status bar appearance en info.plist configurado en y su controlador de vista está integrado en UINavigationController, entonces su controlador de navegación será responsable de actualizar el estilo de la barra (a través de navigationController.navigationBar.barStyle) y la propiedad preferredStatusBarStyle serán ignoradas

8
swearwolf 22 oct. 2018 a las 11:39