UINavigationController senza barra di navigazione?


117

Ho un'app universale e sulla versione per iPad che sto utilizzando UISplitViewControllerper creare un'interfaccia simile all'app Mail.

Avevo problemi a spingere le nuove visualizzazioni di dettaglio, quindi ho deciso di utilizzare un in UINavigationControllermodo da poter semplicemente spingere e visualizzare le visualizzazioni secondo necessità. Tuttavia, non desidero utilizzare la vista di navigazione o una barra degli strumenti. Ma non importa quello che faccio, non posso nascondere la barra di navigazione.

Ho provato a deselezionare "Mostra la barra di navigazione" in IB e ho anche provato a impostare:

[self.navigationController setNavigationBarHidden:YES];

in viewDidLoad/ viewDidAppear/ viewWillAppear. L'ho anche provato in ciascuna delle visualizzazioni che verranno spinte. Niente funziona.

C'è qualcosa che mi manca qui? È possibile avere un UINavigationControllersenza barra degli strumenti o barra di navigazione?


Qual è la superclasse della classe di cui selfè un'istanza?

Risposte:


192

Dovresti essere in grado di fare quanto segue:

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

dove self.navigationController è (ovviamente) un'istanza di UINavigationController. Sembra funzionare per me, ma l'ho testato solo brevemente prima di pubblicarlo.


2
Quindi, nel tuo caso, self.navigationController.navigationBar.hidden = YES;
Ashwin

4
Quello ha fatto! Anche se aggiungerò che sono stato in grado di selezionare semplicemente la casella Nascosta per la barra degli strumenti Nagivation in IB invece di farlo tramite il codice. Grazie!
DOOManiac

1
Sì, mi dispiace per questo. Avrei dovuto accorgermi del fatto che stavi usando IB e menzionare la scatola nascosta invece di usare il codice. Recentemente ho cercato di creare tutte le mie interfacce interamente a livello di programmazione senza file .xib, quindi sono andato direttamente a questo per la mia risposta.
Ashwin

5
Chiamo questo è in viewwillapear nel mio controller di visualizzazione in questo modo - (void)viewWillAppear:(BOOL)animated { self.navigationController.navigationBar.hidden = YES; } e funziona
Ali,

2
La navBar è nascosta ma lo schermo del controller della vista non si espande a schermo intero
ArdenDev

40

Se non desideri alcuna barra di navigazione e desideri che il contenuto venga regolato fino a dove sarebbe normalmente la barra di navigazione, dovresti usare

self.navigationController.navigationBarHidden = YES;

Questo ti dà un risultato come questo:

inserisci qui la descrizione dell'immagine

Considerando che self.navigationController.navigationBar.hidden = YES;ti dà uno spazio dove dovrebbe essere la navigationBar. Come questo:

inserisci qui la descrizione dell'immagine


Molto bella distinzione sulla differenza di risultati con iOS 6. A partire da IOS 7, sembra che lo spazio sia stato rimosso, ma aspetterò che più persone verifichino che è così.
Alex Zavatone

39

In Xcode 4.3.2:

  1. Seleziona il controller di navigazione nello storyboard
  2. Seleziona l'Ispettore Attributi nel pannello Utilità (a destra)
  3. Nella categoria Controller di navigazione hai due caselle di controllo:

    [] Mostra la barra di navigazione

    [] Mostra la barra degli strumenti

Ha funzionato per me ...


8

Swift 4

Lo nascondo in viewWillAppear

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

        self.navigationController?.isNavigationBarHidden = true;
    }

Quindi puoi rimetterlo quando premi un segue (se vuoi avere il pulsante indietro nella vista successiva)

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

3

Swift 3 a livello di programmazione

self.navigationController.isNavigationBarHidden = true

o

self.navigationController.navigationBar.isHidden = true

Nota: non ho notato differenze tra questi due approcci nei test su iOS 10.


1

Tutte queste risposte lasciano ancora uno spazio in alto per la barra di stato: aggiungi questa riga per rimuovere anche quella:

navController.navigationBar.isHidden = true
navController.accessibilityFrame = CGRect.zero
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.