Cómo ocultar la Navigation Bar en la primera pantalla en Swift: guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: ¿por qué ocultar la Navigation Bar es un dolor para el principiante?

\n\n

¿Alguna vez te has encontrado con esta situación: creas una aplicación, la primera pantalla debe verse como un landing a pantalla completa, sin la barra gris en la parte superior, pero en la segunda pantalla ya necesitas la Navigation Bar para la navegación? Parecería lógico simplemente escribir navigationController?.isNavigationBarHidden = true en viewDidLoad. Pero aquí comienza la magia: la Navigation Bar puede "aparecer" de nuevo al regresar de otra pantalla, la animación se rompe, o simplemente no se oculta.

\n\n

Esta es una de las preguntas más populares en Stack Overflow (el tema "How to hide a navigation bar from first ViewController in Swift?" ha acumulado miles de visitas). En este tutorial, no solo cubriremos la solución básica, sino también los detalles sutiles: cómo hacerlo de forma elegante, sin errores de animación, y cómo adaptarlo a los estándares modernos de iOS. Si buscas una forma fiable de ocultar la navigation bar en la primera pantalla en Swift, estás en el lugar correcto.

\n\n

El problema: ¿qué sucede "bajo el capó"?

\n\n

Cuando usas UINavigationController, este gestiona la Navigation Bar para todos los controladores hijos. Si simplemente la ocultas en viewDidLoad del primer ViewController, al navegar a la segunda pantalla y volver, la propiedad puede restablecerse. ¿Por qué?

\n\n
    \n
  • viewDidLoad se llama una sola vez — cuando la pantalla se vuelve a mostrar, el código no se ejecuta.
  • \n
  • UINavigationController sincroniza la barra basándose en el último controlador en la pila.
  • \n
  • La animación de transición puede "trabarse" si no se configuran los parámetros animated.
  • \n
\n\n

Pero no te preocupes: la solución es elegante y sencilla. Vamos a escribir el código.

\n\n

Solución básica: ocultar la Navigation Bar en el primer ViewController

\n\n

La forma más directa es sobrescribir el método viewWillAppear. ¿Por qué aquí? Porque este método se llama cada vez antes de que aparezca la pantalla, a diferencia de viewDidLoad. De esta manera, incluso después de regresar de otra pantalla, la Navigation Bar se ocultará de nuevo.

\n\n

Paso 1: Crear el primer ViewController

\n\n

Supongamos que tienes un FirstViewController que es el controlador raíz en un UINavigationController.

\n\n
import UIKit\n\nclass FirstViewController: UIViewController {\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        // Ocultar la Navigation Bar sin animación\n        navigationController?.setNavigationBarHidden(true, animated: animated)\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n        // Restaurar la Navigation Bar al salir de la pantalla\n        navigationController?.setNavigationBarHidden(false, animated: animated)\n    }\n}
\n\n

Observa que usamos setNavigationBarHidden(_:animated:) con el parámetro animated. Si pasas true, la Navigation Bar se ocultará/mostrará con una animación sincronizada con la transición. Esto se ve profesional.

\n\n

Paso 2: Configurar la segunda pantalla

\n\n

En la segunda pantalla (SecondViewController), la Navigation Bar se mostrará por defecto. No es necesario escribir nada adicional: aparecerá automáticamente al navegar.

\n\n

Paso 3: Verificar en Interface Builder o en código

\n\n

Asegúrate de que tu UINavigationController esté configurado correctamente. Si usas Storyboard, verifica que la primera pantalla sea FirstViewController. Si es en código:

\n\n
let navController = UINavigationController(rootViewController: FirstViewController())
\n\n

¡Listo! Ejecuta la aplicación: la primera pantalla no tendrá Navigation Bar, la segunda sí.

\n\n

Técnicas avanzadas: animación y SwiftUI

\n\n

La solución básica funciona, pero en aplicaciones reales p

Blogs

Book Recommendations