¿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.


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

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

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

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

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

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

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

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


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.


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

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

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

44
¿Qué es el controlador de ventana?
MBH

Esto es para macOS, no iOS
Koen.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.