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