¿Cómo ocultar una barra de navegación desde el primer ViewController en Swift?

258

¿Cómo puedo ocultar una barra de navegación desde el primer ViewController o un ViewController particular en Swift?

Usé el siguiente código en viewDidLoad():

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

y también en viewWillAppear:

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

Ambos métodos ocultan el controlador de navegación de todos los ViewControllers.

Aby Mathew
fuente
1
que necesita para gestionar de forma manual para todos los viewcontrollers .. no se puede hacer por cualquiera ..
itsji10dra

Respuestas:

321

Si sabe que todas las demás vistas deben tener la barra visible, puede usarla viewWillDisappearpara volverla a ver.

En 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)
}
Rengers
fuente
1
Esta respuesta es más eficiente. Piense en el código repetitivo con cada nuevo ViewController que agregue. 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)
}
Michael Garito
fuente
3
Con la anulación, no olvide llamar a los súper métodos: super.viewWillAppear (animado) y super.viewWillDisappear (animado)
NielsKoole
¿Elimina el enlace que dice atrás?
Contras Bulaquena
Estaba convencido de que no funcionaría bien con el "deslizamiento hacia atrás" en el nivel visual, pero todo está bien. ¡Gracias!
tzaloga 01 de
Nota al margen: self.no es necesario.
Fayer
Al deslizar hacia atrás, desde la vista con la barra de navegación a la vista con la barra de navegación oculta, ¿cómo reimplementamos el desvanecimiento de la barra de navegación?
T.Okahara
77

Usted podrá mostrar 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)
}
Deepesh
fuente
21

También puede crear una extensión para esto para poder reutilizar la extensión sin implementar esto una y otra vez en cada controlador de vista.

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

}

Entonces puede usar los métodos de extensión como se muestra a continuación

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

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        showNavigationBar(animated: animated)
    }
Ankahathara
fuente
8
Realmente no vale la pena la extensión, ¿verdad? :)
Joris Weimar
3
Depende de cuántas vistas esté ocultando / mostrando las barras de navegación. Siento que la mayoría de los casos solo oculta el primero, pero si lo hace mucho, la extensión es agradable.
jnwagstaff
Definitivamente, no vale la pena. No inventes algo que ya existe.
Thafer Shahin
8

En Swift 3, puede usar la propiedad isNavigationBarHidden también para mostrar u ocultar la barra de navegación

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;
}
Dilip Jangid
fuente
3

Formas de mostrar la barra de navegación en Swift:

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

Formas de ocultar la barra de navegación en Swift:

self.navigationController?.setNavigationBarHidden(true, animated: true)
self.navigationController?.navigationBar.isHidden = true
self.navigationController?.isNavigationBarHidden = true
Mahesh Chaudhari
fuente
1
self.navigationController? .setNavigationBarHidden (verdadero, animado: verdadero) funcionó para mí
Nate Uni
0

En iOS 8 hazlo como

navigationController?.hidesBarsOnTap = true

pero solo cuando es parte de un UINavigationController

hazlo falso cuando lo quieras de vuelta

Zar E Ahmer
fuente
0

Utilizo una variante de lo anterior, y aíslo secciones de mi aplicación para integrarlas en diferentes NavControllers. De esta manera, no tengo que restablecer la visibilidad. Muy útil en secuencias de inicio, por ejemplo.

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

Llame al método oculto establecido a la vista Aparecerá y desaparecerá. si no llama al método a la vista, desaparecerá con el estado falso. Ocultará la barra de navegación en la jerarquía de navegación 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)
}
Talha Rasool
fuente
Esta es una respuesta de copiar / pegar. ¿Cuál es la diferencia entre su respuesta y las otras 2 o 3 respuestas iguales aquí?
Starsky
-3

Puedes hacerlo desde el controlador de ventana (Swift3)

class WindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        window?.titleVisibility = .hidden
    }
}
Pedro Luz
fuente
44
¿Qué es el controlador de ventana?
MBH
Esto es para macOS, no iOS
Koen.