preferredstatusbarstyle color change based bar ios statusbar

ios - color - prefersStatusBarHidden no se llama



status bar light swift 4 (7)

Cuando anidamos el UINavigationController , nuestro AppDelegate. Ventana. RootViewController Por lo general, creamos navigationController cuando primero llamamos a la función de navigationController childViewControllerForStatusBarHidden , porque el valor predeterminado devuelve nil, luego se llama a la función de barra de estado preferente del estado de barra de estado de navegación, entonces la barra de estado que configuramos en viewController no se llamará así. no funciona Así que vamos a crear nuestro propio que hereda de NavigationController , en esta subclase ChildViewControllerForStatusBarHidden .

Tengo un UITabViewController -> UINavigationController -> UIViewController y quiero ocultar y mostrar la barra de estado. cuando llamo a setNeedsStatusBarAppearanceUpdate() no se llama al método prefersStatusBarHidden .

func fadeOutStatusBar (notification: NSNotification) { statusBarHidden = true self.setNeedsStatusBarAppearanceUpdate() } func fadeInStatusBar (notification: NSNotification) { statusBarHidden = false self.setNeedsStatusBarAppearanceUpdate() } override func prefersStatusBarHidden() -> Bool { return statusBarHidden }


En primer lugar, la View controller-based status bar appearance en el View controller-based status bar appearance en el archivo .plist debe configurarse en .

  • Si quieres que la barra de estado esté oculta en toda la aplicación:

Para Objective-C:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [application setStatusBarHidden:YES]; return YES; }

Para Swift:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool { application.statusBarHidden = true return true }

  • Si desea que la barra de estado desaparezca en Especificar controlador de vista , en el archivo .m , simplemente implemente:

Para Objective-C:

- (BOOL)prefersStatusBarHidden { return YES; }

Para Swift:

override func prefersStatusBarHidden() -> Bool { return true }


Lo averigué. en el archivo info.plist: ver el aspecto de la barra de estado del controlador debe establecerse en SÍ


Para Swift 4.2 iOS 12

Suponiendo que tiene un ViewController contenido dentro de UINavigationController . Crea tu propia Subclase de UINavigationController e incluye en ella:

override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }

Asegúrese de que info.plist establece la configuración de View Controller de la barra de estado


Para swift 3, primero, asegúrese de que la View controller-based status bar appearance esté establecida en YES en su archivo de información

Y luego simplemente agregue esto a su controlador de vista:

override var prefersStatusBarHidden: Bool { get { return true } }

Espero que esto ayude a la gente en el futuro.


Quizás no sea una solución al problema de OP, pero lo que también podría ser la causa de que no se prefersStatusBarHidden a prefersStatusBarHidden es si ha utilizado una segunda ventana en el delegado de su aplicación, por ejemplo, para mostrar una pantalla de presentación y no la ocultó después de la presentación se mostró - entonces esa ventana recibe los eventos que llevan a llamar a estas funciones.


puede escribir una extensión de UINavigationController que invalida su implementación predeterminada y devuelve el ViewController superior.

extension UINavigationController { override public func childViewControllerForStatusBarHidden() -> UIViewController{ return self.topViewController } }