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.


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)
}

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)
}

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)
}

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)
    }

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;
}

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

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

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


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.


0
 private func setupView() {
        view.backgroundColor = .white
        navigationController?.setNavigationBarHidden(true, animated: false)
    }

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)
}

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

4
qu'est-ce que le contrôleur de fenêtre?
MBH

C'est pour macOS, pas iOS
Koen.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.