web-dev-qa-db-fra.com

Masquer la barre de navigation dans la vue spécifique - Swift 3

J'ai NavigationController qui gère la navigation dans mon application . Selon ma conception, la toute première vue ne devrait pas avoir de barre de navigation visible. Tous les autres après le feront.

Dans cette FirstView, je l'utilise jusqu'à présent pour masquer la barre de navigation, à l'intérieur du ViewDidLoad:

self.navigationController?.isNavigationBarHidden = true

De cette FirstView, je peux accéder à d'autres vues. Dans ces autres vues, je montre la NavBar en utilisant:

self.navigationController?.isNavigationBarHidden = false

Mon problème est que:

  • Lorsque je navigue dans une vue avec NavBar visible et que je retourne à FirstView avec la NavBar masquée, la NavBar est maintenant visible . Fondamentalement, la NavBar ne masque que la toute première fois, puis indique si j'utilise le bouton Précédent.

Comment puis-je empêcher cela?

Je vous remercie!

6

Déplacez ce code vers viewWillAppear() au lieu de viewDidLoad().

viewDidLoad() n'est appelé qu'une fois par contrôleur de vue instanciée, alors que viewWillAppear() est appelé chaque fois que le contrôleur de vue est sur le point d'être présenté à l'écran.

Vous pouvez en savoir plus sur le cycle de vie du contrôleur de vue ici .

7
Eggsalad

Ecrivez le code ci-dessous dans votre méthode FirstViewController 's viewWillAppear .

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated);
self.navigationController?.isNavigationBarHidden = true
}

Et dans votre SecondViewController 's - viewWillAppear method write under code

 override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated);
self.navigationController?.isNavigationBarHidden = false
}

N'essayez pas de masquer et d'afficher la barre de navigation dans viewWillAppear et viewWillDisappear subséquemment dans FirstViewController .

3
Balaji Galave

Vous pouvez utiliser cette fonction pour masquer la barre de navigation avec une animation intéressante:

 func setupAnimationForNavigationBar(caseOfFunction: Bool) {
    if caseOfFunction == true {
        UIView.animate(withDuration: 0.5) {
            self.navigationController?.navigationBar.transform = CGAffineTransform(translationX: 0, y: -200)
        }
    } else {
        UIView.animate(withDuration: 0.5, animations: {
            self.navigationController?.navigationBar.transform = CGAffineTransform.identity
        })
    }

}

Si vous souhaitez masquer NavigationBar, définissez-le "True" et si vous souhaitez appeler à nouveau NavigationBar, définissez-le "False".

1
Huu Phong Nguyen