Comment masquer une barre de navigation du premier ViewController dans Swift?

258

Comment puis-je masquer une barre de navigation du premier ViewController ou d'un ViewController particulier dans swift?

J'ai utilisé le code suivant dans viewDidLoad():

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.isNavigationBarHidden = true
}

et aussi sur viewWillAppear:

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

Les deux méthodes masquent le contrôleur de navigation de tous les ViewControllers.

Aby Mathew
la source
1
vous devez le gérer manuellement pour tous les contrôleurs de vue .. vous ne pouvez le faire pour personne ..
itsji10dra

Réponses:

321

Si vous savez que toutes les autres vues doivent avoir la barre visible, vous pouvez utiliser viewWillDisappearpour la remettre à nouveau visible.

Dans Swift:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.setNavigationBarHidden(true, animated: animated)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationController?.setNavigationBarHidden(false, animated: animated)
}
Rengers
la source
1
Cette réponse est plus efficace. Pensez au code répétitif avec chaque nouveau ViewController que vous ajoutez. stackoverflow.com/a/39679506/5079380
Amr ElAdawy
252

Swift 3

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // Hide the navigation bar on the this view controller
    self.navigationController?.setNavigationBarHidden(true, animated: animated)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    // Show the navigation bar on other view controllers
    self.navigationController?.setNavigationBarHidden(false, animated: animated)
}
Michael Garito
la source
3
Avec surcharge, n'oubliez pas d'appeler les super méthodes: super.viewWillAppear (animated) et super.viewWillDisappear (animated)
NielsKoole
Supprime-t-il le lien qui dit en retour?
Cons Bulaquena
J'étais convaincu que ça ne marcherait pas bien avec le "swipe back" au niveau visuel, mais tout va bien. Merci!
tzaloga
Remarque: self.pas nécessaire.
Fayer
Sur le balayage arrière, de la vue avec la barre de navigation à la vue avec la barre de navigation cachée, comment réimplémenter la décoloration de la barre de navigation?
T.Okahara
77

Vous pouvez réafficher navigationControllerenviewWillDisappear

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

Swift 3

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    self.navigationController?.setNavigationBarHidden(false, animated: animated)
}
Deepesh
la source
21

Vous pouvez également créer une extension pour cela afin que vous puissiez réutiliser l'extension sans l'implémenter encore et encore dans chaque contrôleur de vue.

import UIKit

extension UIViewController {
    func hideNavigationBar(animated: Bool){
        // Hide the navigation bar on the this view controller
        self.navigationController?.setNavigationBarHidden(true, animated: animated)

    }

    func showNavigationBar(animated: Bool) {
        // Show the navigation bar on other view controllers
        self.navigationController?.setNavigationBarHidden(false, animated: animated)
    }

}

Vous pouvez donc utiliser les méthodes d'extension comme ci-dessous

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        hideNavigationBar(animated: animated)
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        showNavigationBar(animated: animated)
    }
Ankahathara
la source
8
Ne vaut pas vraiment l'extension, n'est-ce pas? :)
Joris Weimar
3
Cela dépend du nombre de vues que vous masquez / affichez les barres de navigation. J'ai l'impression que la plupart des cas, vous ne cachez que le premier, mais si vous le faites souvent, l'extension est agréable.
jnwagstaff
Certainement, cela n'en vaut pas la peine. N'inventez pas quelque chose qui existe déjà.
Thafer Shahin
8

Dans Swift 3, vous pouvez également utiliser la propriété isNavigationBarHidden pour afficher ou masquer la barre de navigation

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    // Hide the navigation bar for current view controller
    self.navigationController?.isNavigationBarHidden = true;
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    // Show the navigation bar on other view controllers
   self.navigationController?.isNavigationBarHidden = false;
}
Dilip Jangid
la source
3

Façons d'afficher la barre de navigation dans Swift:

self.navigationController?.setNavigationBarHidden(false, animated: true)
self.navigationController?.navigationBar.isHidden = false
self.navigationController?.isNavigationBarHidden = false
Mahesh Chaudhari
la source
3

Façons de masquer la barre de navigation dans Swift:

self.navigationController?.setNavigationBarHidden(true, animated: true)
self.navigationController?.navigationBar.isHidden = true
self.navigationController?.isNavigationBarHidden = true
Mahesh Chaudhari
la source
1
self.navigationController? .setNavigationBarHidden (true, animated: true) a fonctionné pour moi
Nate Uni
0

Dans IOS 8, faites-le comme

navigationController?.hidesBarsOnTap = true

mais uniquement lorsqu'il fait partie d'un UINavigationController

faites-le faux quand vous le voulez

Zar E Ahmer
la source
0

J'utilise une variante de ce qui précède et j'isole les sections de mon application à intégrer dans différents NavControllers. De cette façon, je n'ai pas à réinitialiser la visibilité. Très utile dans les séquences de démarrage, par exemple.

a dessiné..
la source
0
 private func setupView() {
        view.backgroundColor = .white
        navigationController?.setNavigationBarHidden(true, animated: false)
    }
Wasim
la source
0

Appelez la méthode set hide dans la vue Apparaîtra et disparaîtra. si vous n'appelez pas, la méthode en vue disparaîtra avec le statut false. Elle masquera la barre de navigation dans la hiérarchie de navigation complète.

 override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.setNavigationBarHidden(true, animated: true)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    self.navigationController?.setNavigationBarHidden(false, animated:true)
}
Talha Rasool
la source
Il s'agit d'une réponse copier / coller. Quelle est la différence entre votre réponse et les 2 ou 3 autres réponses égales ici ??
Starsky
-3

Vous pouvez le faire à partir du contrôleur de fenêtre (Swift3)

class WindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        window?.titleVisibility = .hidden
    }
}
Pedro Luz
la source
4
qu'est-ce que le contrôleur de fenêtre?
MBH
C'est pour macOS, pas iOS
Koen.