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 SÍ .
- 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
}
}