J'ai un UITabViewController
-> UINavigationController
-> UIViewController
et je veux masquer et afficher la barre de statut. Lorsque j'appelle setNeedsStatusBarAppearanceUpdate()
, la méthode prefersStatusBarHidden
n'est pas appelée.
func fadeOutStatusBar (notification: NSNotification) {
statusBarHidden = true
self.setNeedsStatusBarAppearanceUpdate()
}
func fadeInStatusBar (notification: NSNotification) {
statusBarHidden = false
self.setNeedsStatusBarAppearanceUpdate()
}
override func prefersStatusBarHidden() -> Bool {
return statusBarHidden
}
Deviner. dans le fichier info.plist: afficher la barre d'état du contrôleur doit être défini sur OUI
Tout d'abord, View controller-based status bar appearance
dans le fichier .plist
doit être défini surYES.
Pour Objective-C:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[application setStatusBarHidden:YES];
return YES;
}
Pour Swift:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool {
application.statusBarHidden = true
return true
}
.m
, implémentez simplement:Pour Objective-C:
- (BOOL)prefersStatusBarHidden {
return YES;
}
Pour Swift:
override func prefersStatusBarHidden() -> Bool {
return true
}
Ce n’est peut-être pas une solution au problème de l'OP, mais si prefersStatusBarHidden
n'est pas appelé, c'est aussi si vous avez utilisé une deuxième fenêtre dans votre délégué d'application, par exemple pour afficher un écran de démarrage et si vous ne l'avez pas masquée après le démarrage. a été montré - alors cette fenêtre obtient les événements qui mènent à appeler ces fonctions.
vous pouvez écrire une extension de UINavigationController qui remplace son implémentation par défaut et renvoie le ViewController supérieur.
extension UINavigationController {
override public func childViewControllerForStatusBarHidden() -> UIViewController{
return self.topViewController
}
}
Lorsque nous avons imbriqué le UINavigationController , notre AppDelegate. La fenêtre. RootViewController Généralement, nous créons navigationController lorsqu’il appelle pour la première fois le navigationController childViewControllerForStatusBarHidden function, car la valeur par défaut renvoie nil, puis est appelé navigationController prefersStatusBarHidden viewController à travers le prefersStatusBarHidden fonction ne sera pas appelée, donc cela ne fonctionnera pas . Nous allons donc créer notre propre système qui hérite du NavigationController , dans cette sous-classe ChildViewControllerForStatusBarHidden. une fonction.
Pour Swift 4.2 iOS 12
En supposant que vous ayez une ViewController
dans UINavigationController
. Créez votre propre sous-classe de UINavigationController
et incluez-la:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Assurez-vous que info.plist
définit le réglage de la barre d'état basé sur View Controller