Come nascondere una barra di navigazione dal primo ViewController in Swift?


258

Come posso nascondere rapidamente una barra di navigazione dal primo ViewController o da un ViewController particolare?

Ho usato il seguente codice in viewDidLoad():

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

e anche su viewWillAppear:

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

Entrambi i metodi nascondono il controller di navigazione da tutti i ViewController.


1
devi gestirlo manualmente per tutti i visualizzatori .. non puoi farlo per nessuno ..
itsji10dra

Risposte:


321

Se sai che tutte le altre viste dovrebbero avere la barra visibile, puoi usarla viewWillDisappearper renderla nuovamente visibile.

In 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
Questa risposta è più efficiente. Pensa al codice ripetitivo con ogni nuovo ViewController che aggiungi. 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
Con l'override non dimenticare di chiamare i super metodi: super.viewWillAppear (animato) e super.viewWillDisappear (animato)
NielsKoole,

Rimuove il collegamento che dice indietro?
Contro Bulaquena,

Ero convinto che non avrebbe funzionato bene con il "colpo indietro" a livello visivo, ma va tutto bene. Grazie!
tzaloga,

Nota a margine: self.non necessaria.
Fayer,

Al passaggio indietro, dalla vista con la barra di navigazione alla vista con la barra di navigazione nascosta, come reimplementiamo la dissolvenza della barra di navigazione?
T.Okahara,

77

È possibile scoprire navigationControllerinviewWillDisappear

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

Puoi anche creare un'estensione per questo in modo da poter riutilizzare l'estensione senza implementarla ancora e ancora in ogni controller di visualizzazione.

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

}

Quindi puoi utilizzare i metodi di estensione come di seguito

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

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

8
Non vale davvero l'estensione, vero? :)
Joris Weimar il

3
Dipende da quante visualizzazioni stai nascondendo / mostrando le barre di navigazione. Sento che la maggior parte dei casi nascondi solo il primo ma se lo fai molto l'estensione è piacevole.
jnwagstaff,

Sicuramente non ne vale la pena. Non inventare qualcosa esiste già.
Thafer Shahin,

8

In Swift 3, puoi utilizzare la proprietà isNavigationBarHidden anche per mostrare o nascondere la barra di navigazione

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

Modi per mostrare la barra di navigazione in Swift:

self.navigationController?.setNavigationBarHidden(false, animated: true)
self.navigationController?.navigationBar.isHidden = false
self.navigationController?.isNavigationBarHidden = false

3

Modi per nascondere la barra di navigazione in Swift:

self.navigationController?.setNavigationBarHidden(true, animated: true)
self.navigationController?.navigationBar.isHidden = true
self.navigationController?.isNavigationBarHidden = true

1
self.navigationController? .setNavigationBarHidden (true, animato: true) ha funzionato per me
Nate Uni

0

In IOS 8 fallo come

navigationController?.hidesBarsOnTap = true

ma solo quando fa parte di un UINavigationController

rendilo falso quando lo vuoi indietro


0

Uso una variante di quanto sopra e isola le sezioni della mia app da incorporare in diversi NavController. In questo modo, non devo ripristinare la visibilità. Molto utile nelle sequenze di avvio, ad esempio.


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

0

Chiama il metodo set hide in view Apparirà e scomparirà. se non chiamerai il metodo in vista sparirà con lo stato falso. Nasconderà la barra di navigazione nella gerarchia di navigazione completa

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

Questa è una risposta copia / incolla. Qual è la differenza tra la tua risposta e le altre 2 o 3 risposte uguali qui ??
Starsky

-3

Puoi farlo dal controller della finestra (Swift3)

class WindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        window?.titleVisibility = .hidden
    }
}

4
che cos'è il controller Windows?
MBH,

Questo è per macOS, non iOS
Koen.
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.