UINavigationController sans barre de navigation?

117

J'ai une application universelle et sur la version iPad que j'utilise UISplitViewControllerpour créer une interface similaire à l'application Mail.

J'avais du mal à pousser de nouvelles vues de détail, alors j'ai décidé d'utiliser un UINavigationControllerpour pouvoir simplement pousser et afficher les vues au besoin. Cependant, je ne souhaite pas utiliser la vue de navigation ou une barre d'outils. Mais quoi que je fasse, je ne peux pas cacher la barre de navigation.

J'ai essayé de décocher "Afficher la barre de navigation" dans IB, et j'ai également essayé de définir:

[self.navigationController setNavigationBarHidden:YES];

dans le viewDidLoad/ viewDidAppear/ viewWillAppear. Je l'ai également essayé dans chacune des vues qui seront poussées. Rien ne fonctionne.

Y a-t-il quelque chose qui me manque ici? Est-il possible d'avoir un UINavigationControllersans barre d'outils ou barre de navigation?

DOOManiac
la source
De quoi la superclasse de la classe selfest-elle une instance?

Réponses:

193

Vous devriez pouvoir effectuer les opérations suivantes:

self.navigationController.navigationBar.isHidden = true //Swift 5

où self.navigationController est (évidemment) une instance de UINavigationController. Cela semble fonctionner pour moi, mais je ne l'ai testé que brièvement avant de le publier.

Ashwin
la source
2
Donc, dans votre cas, self.navigationController.navigationBar.hidden = YES;
Ashwin
4
Cela l'a fait! Bien que j'ajoute que j'ai pu simplement cocher la case Caché de la barre d'outils Nagivation dans IB au lieu de le faire via du code. Merci!
DOOManiac
1
Ouais, désolé pour ça. J'aurais dû remarquer le fait que vous utilisiez IB et mentionner la boîte cachée au lieu d'utiliser du code. J'ai récemment commencé à créer toutes mes interfaces entièrement par programme sans fichiers .xib, alors je suis allé directement à cela pour ma réponse.
Ashwin
5
J'appelle cela est en vue, j'appelle dans mon contrôleur de vue comme celui - (void)viewWillAppear:(BOOL)animated { self.navigationController.navigationBar.hidden = YES; } -ci et cela fonctionne
Ali
2
La barre de navigation est masquée mais l'écran de mon contrôleur de vue ne se développe pas en plein écran
ArdenDev
40

Si vous ne voulez pas de barre de navigation et que vous voulez que le contenu soit ajusté à l'endroit où la barre de navigation serait normalement, vous devez utiliser

self.navigationController.navigationBarHidden = YES;

Cela vous donne un résultat comme celui-ci:

entrez la description de l'image ici

Tandis que self.navigationController.navigationBar.hidden = YES;vous donne un espace où la navigationBar devrait être. Comme ça:

entrez la description de l'image ici

HalR
la source
Très belle distinction sur la différence de résultats avec iOS 6. A partir de IOS 7, il semble que l'espace soit supprimé, mais j'attendrai que plus de gens vérifient que c'est le cas.
Alex Zavatone
39

Dans Xcode 4.3.2:

  1. Sélectionnez le contrôleur de navigation dans le storyboard
  2. Sélectionnez l'inspecteur d'attributs dans le panneau Utilitaires (à droite)
  3. Dans la catégorie Contrôleur de navigation, vous avez deux cases à cocher:

    [] Affiche la barre de navigation

    [] Affiche la barre d'outils

A travaillé pour moi ...

Avner
la source
8

Swift 4

Je le cache dans la vue

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

        self.navigationController?.isNavigationBarHidden = true;
    }

Ensuite, vous pouvez le remettre lorsque vous appuyez sur une séquence (si vous voulez avoir le bouton de retour sur la vue suivante)

     override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
     {
        self.navigationController?.isNavigationBarHidden = false;
     }
user1296082
la source
3

Swift 3 par programmation

self.navigationController.isNavigationBarHidden = true

ou

self.navigationController.navigationBar.isHidden = true

Remarque: je n'ai pas vu de différence entre ces deux approches de test sur iOS 10.

Mobile Dan
la source
1

Toutes ces réponses laissent toujours un espace en haut pour la barre d'état - ajoutez cette ligne pour supprimer cela également:

navController.navigationBar.isHidden = true
navController.accessibilityFrame = CGRect.zero
Cbas
la source