Cómo eliminar la línea inferior de UINavigationBar: 3 métodos funcionales

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é esta maldita línea no deja dormir a los desarrolladores?

\n\n

Si alguna vez has intentado diseñar una aplicación "como Apple Music" o "como Telegram", seguro te has encontrado con esto. Creas un UINavigationBar perfecto con un hermoso degradado, transparencia o un color personalizado, ejecutas el simulador y ves esa delgada línea gris o negra (1 píxel) en la parte inferior. Parece un artefacto, como suciedad en el cristal. Y sí, es molesta.

\n\n

Esa línea de 1px no es un error, es una característica. Es la combinación de shadowImage + backgroundImage que Apple dejó por defecto. Incluso en iOS 17 sigue apareciendo si no le dices al sistema: "Oye, quita esto". La pregunta en Stack Overflow sobre este tema tiene miles de visitas y decenas de respuestas. Así que es un tema realmente espinoso.

\n\n

En este artículo te mostraré 3 enfoques funcionales en Swift para ocultar la línea inferior de UINavigationBar. Analizaremos tanto métodos antiguos (iOS 13-) como los modernos a través de UINavigationBarAppearance. ¡Allá vamos!

\n\n

Método 1: El clásico — mediante backgroundImage y shadowImage

\n\n

El método más antiguo y probado. Funciona desde iOS 5 (sí, desde aquellos tiempos en que el esqueomorfismo estaba de moda). La idea es simple: establecemos una imagen vacía como fondo y sombra.

\n\n

Paso 1: Crear una imagen vacía

\n\n
extension UIImage {\n    static func pixelImage(withColor color: UIColor = .clear) -> UIImage {\n        let rect = CGRect(x: 0, y: 0, width: 1, height: 1)\n        UIGraphicsBeginImageContext(rect.size)\n        color.setFill()\n        UIRectFill(rect)\n        let image = UIGraphicsGetImageFromCurrentImageContext()\n        UIGraphicsEndImageContext()\n        return image ?? UIImage()\n    }\n}
\n\n

Paso 2: Aplicarlo a navigationBar

\n\n
func hideBottomLine() {\n    let emptyImage = UIImage.pixelImage()\n    navigationController?.navigationBar.setBackgroundImage(emptyImage, for: .default)\n    navigationController?.navigationBar.shadowImage = emptyImage\n}
\n\n

Ventajas: Funciona en todas partes, incluso en iOS antiguos.
\nDesventajas: No siempre funciona correctamente con scrollEdgeAppearance y títulos grandes. Si tienes un UISearchBar, la línea puede volver.

\n\n

Método 2: El moderno — mediante UINavigationBarAppearance (iOS 13+)

\n\n

A partir de iOS 13, Apple presentó UINavigationBarAppearance. Es un objeto único que gestiona todos los estados: estándar, desplazamiento y compacto. Ideal para quienes quieren "configurar una vez y olvidarse".

\n\n

Ejemplo completo para UIViewController

\n\n
func setupTransparentNavigationBar() {\n    let appearance = UINavigationBarAppearance()\n    appearance.configureWithTransparentBackground()\n    appearance.backgroundColor = .clear\n    appearance.shadowColor = .clear  // elimina la línea\n    \n    navigationController?.navigationBar.standardAppearance = appearance\n    navigationController?.navigationBar.scrollEdgeAppearance = appearance\n    navigationController?.navigationBar.compactAppearance = appearance\n}
\n\n

Observa: shadowColor = .clear es la línea clave. Si no la escribes, la línea permanecerá. configureWithTransparentBackground() hace el fondo transparente, pero no toca la sombra.

\n\n

Si necesitas un fondo de color, pero sin línea:

\n\n
let appearance = UINavigationBarAppearance()\nappearance.configureWithOpaqueBackground()\nappearance.backgroundColor = .systemBlue\nappearance.shadowColor = .clear\n\nnavigationController?.navigationBar.standardAppearance = appearance\nnavigationController?.navigationBar.scrollEdgeAppearance = appearance
\n\n

Ventajas: Código limpio, fácil de combinar con títulos grandes y búsqueda.
\nDesventajas: Solo iOS 13+. Si el proyecto soporta iOS 12, tendrás que

Blogs

Book Recommendations