web-dev-qa-db-fra.com

masquer la barre d'état Swift 4

J'essaie de masquer la barre d'état dans l'un de mes contrôleurs UIView (Swift 4).

  • Tout d'abord, je règle Afficher l'apparence de la barre d'état basée sur le contrôleur surYESin Info.plist.

  • J'ai remplacé la propriété prefersStatusBarHidden dans mon contrôleur:


override var prefersStatusBarHidden: Bool {
     return true
}

  • Et dans viewDidLoad(), j’ai ajouté la fonction setNeedsStatusBarAppearanceUpdate() pour forcer la lecture de la propriété prefersStatusBarHidden

Après tout cela, je vois toujours la barre d’état sur cette UIViewController.

Quelqu'un peut-il m'aider, s'il vous plaît? 

13
Dragisa Dragisic

Vous pouvez masquer la barre d'état dans tout ou partie de vos contrôleurs de vue en ajoutant simplement le code suivant:

override var prefersStatusBarHidden: Bool {
     return true
   }

Tout contrôleur de vue contenant ce code masquera la barre d'état par défaut.

Si vous souhaitez animer la barre d'état, appelez simplement setNeedsStatusBarAppearanceUpdate () sur votre contrôleur de vue, ce qui forcera prefersStatusBarHidden à être relu, et vous pourrez alors renvoyer une valeur différente. Si vous le souhaitez, votre appel à setNeedsStatusBarAppearanceUpdate () peut se trouver réellement dans un bloc d’animation, ce qui permet à la barre d’état de se masquer ou de s’afficher de manière fluide.

20
Viraj Padsala

Vous avez probablement déjà trouvé votre propre solution à ce problème, mais je l’ai fonctionné ainsi:

override func viewWillAppear(_ animated: Bool) {
    // Sets the status bar to hidden when the view has finished appearing
    let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
    statusBar.isHidden = true
}

override func viewWillDisappear(_ animated: Bool) {
    // Sets the status bar to visible when the view is about to disappear
    let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
    statusBar.isHidden = false
}
6
MachTurtle

Bien que certaines implémentations soient plus propres telles que:

UIApplication.shared.isStatusBarHidden = true

Il y a des animations de coupures étranges pendant les transitions. Bien que plus verbeuse, je préfère la solution de @ MachTurtle:

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(true)
        if let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as? UIView{
        statusBar.isHidden = true
        }
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)
    let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
    statusBar.isHidden = false
}

Essayez-le, fonctionne très bien pour moi.

5
Creeptosis

Essayez de régler l'indicateur "Afficher l'apparence de la barre d'état basée sur le contrôleur" dans Info.plist sur OUI. Cela forcera l'application à appeler la propriété prefersStatusBarHidden: Bool sur chaque contrôleur de vue.

 View controller-based status bar appearance flag

3
Halyna Rubashko

Utilisez le code suivant UIApplication.shared.isStatusBarHidden = true

c’est la seule chose que j’ai trouvée qui fonctionne dans iOS11 . Vous pouvez écrire dans didFinishLaunchingWithOptions ou dans 'viewWillAppear' de vous BaseViewController Enjoy.

1
nitish005

Comme vous l'avez dit, vous utilisez UINavigationController pour accéder à votre contrôleur de vue personnalisé. Je suppose que vous avez défini votre contrôleur de vue personnalisée comme vue racine de votre UINavigationController. Dans ce cas, le remplacement de var prefersStatusBarHidden dans votre contrôleur de vue personnalisé ne fonctionnera pas, mais vous devrez sous-classer votre contrôleur UINavigation et remplacer la propriété à cet endroit, comme indiqué ci-dessous:

class CustomNavigationController: UINavigationController {

    override var prefersStatusBarHidden: Bool {
        return true
    }

}
1
Shayeeb

Essayez de vérifier Masquer la barre d'état sous la section Général des paramètres de votre projet.

 Hide status bar option under Project settings/General

0
Tamás Sengel

Il suffit de changer la contrainte "Espace supérieur à" de votre vue de Zone sécurisée à Superview. Et cela fera glisser votre vue sous la barre d'état, il n'y aura donc pas besoin de la cacher![enter image description here] 1

0
Vitya Shurapov

Si vous présentez le contrôleur de vue de manière modale, essayez 

viewController.modalPresentationCapturesStatusBarAppearance = true
0
Alok Sahay

Aucune de ces solutions ne fonctionnait pour moi non plus sur un projet converti sous iOS 11. Voici ce que j'ai fait. J'ai ajouté ce code dans le AppDelegate

func application(_ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool
{
    application.isIdleTimerDisabled = true
    application.isStatusBarHidden = true
    return true
}
0
Nicholas Lue