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.