web-dev-qa-db-fra.com

prefersStatusBarHidden non appelé

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
}
18
Md1079

Deviner. dans le fichier info.plist: afficher la barre d'état du contrôleur doit être défini sur OUI

19
Md1079

Tout d'abord, View controller-based status bar appearance dans le fichier .plist doit être défini surYES.

  • Si vous souhaitez que la barre d'état soit masquée dans entier app:

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
}
  • Si vous souhaitez que la barre d'état disparaisse dans Spécifiez View Controller , dans le fichier .m, implémentez simplement:

Pour Objective-C:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Pour Swift:

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

Pour Swift 3, assurez-vous que View controller-based status bar appearance est défini sur YES dans votre fichier Info plist

 screenshot

Et puis ajoutez ceci à votre contrôleur de vue:

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

J'espère que cela aidera les gens à l'avenir.

13
Barrett

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.

8
TheEye

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
    }
   }
0
JackySong

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.

0
JackySong

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

0
idej1234