Cómo cambiar el color del texto de la barra de estado en iOS: 5 errores fatales y cómo evitarlos
\n\nCada desarrollador iOS se ha enfrentado al menos una vez a esta situación: escribes una aplicación, eliges un fondo oscuro perfecto para la pantalla, pero la barra de estado (Status Bar) sigue mostrando texto negro. Como mínimo, se ve poco profesional, y los usuarios en las reseñas escriben: «no se ve nada». ¿Te suena familiar?
\n\nLa pregunta «How to change Status Bar text color in iOS» es una de las más populares en Stack Overflow con decenas de miles de visitas. El problema es que los principiantes (y no solo ellos) cometen los mismos errores una y otra vez. En este artículo analizaremos 5 errores fatales que arruinan tu barra de estado y mostraremos cómo solucionarlos en Swift. ¡Allá vamos!
\n\n¿Por qué la barra de estado es un dolor de cabeza?
\n\niOS es un sistema estricto. No te permite simplemente colorear la barra de estado como quieras. Todo se gestiona a través de UIStatusBarStyle, y si no conoces el mecanismo exacto, el código se convierte en una adivinanza. Analicemos esto de forma sistemática.
Error n.º 1: Olvidar el Info.plist
\n\nEl error más común es intentar cambiar el estilo de la barra de estado sin haberlo permitido en la configuración del proyecto. Por defecto, iOS gestiona la barra de estado por sí mismo y tu código simplemente se ignora.
\n\n// ❌ Incorrecto: el código existe, pero no hay permiso\noverride var preferredStatusBarStyle: UIStatusBarStyle {\n return .lightContent\n}\n\nSolución: Añade en Info.plist la clave UIViewControllerBasedStatusBarAppearance y establécela en YES. Sin esto, tu View Controller no tendrá derecho a opinar.
<key>UIViewControllerBasedStatusBarAppearance</key>\n<true/>\n\nAhora iOS le preguntará a cada controlador: «¿Qué estilo de barra de estado quieres?» — y tu código funcionará.
\n\nError n.º 2: Lugar incorrecto para el código
\n\nMuchos principiantes escriben preferredStatusBarStyle en el método viewDidLoad() o viewWillAppear(). Y se sorprenden de que no cambie nada.
// ❌ Incorrecto: esto es una propiedad, no un método\noverride func viewDidLoad() {\n super.viewDidLoad()\n preferredStatusBarStyle = .lightContent // ¡No funcionará!\n}\n\nEnfoque correcto: preferredStatusBarStyle es una propiedad computada (computed property) que iOS solicita cada vez que necesita actualizar la barra de estado. Debe declararse a nivel de clase, no dentro de un método.
// ✅ Correcto\noverride var preferredStatusBarStyle: UIStatusBarStyle {\n return .lightContent\n}\n\nSi necesitas cambiar el estilo dinámicamente (por ejemplo, al cambiar de tema), usa setNeedsStatusBarAppearanceUpdate():
var isDarkMode = false {\n didSet {\n setNeedsStatusBarAppearanceUpdate()\n }\n}\n\noverride var preferredStatusBarStyle: UIStatusBarStyle {\n return isDarkMode ? .lightContent : .default\n}\n\nError n.º 3: Ignorar el Navigation Controller
\n\nSi tu aplicación usa UINavigationController, es posible que preferredStatusBarStyle del controlador hijo no funcione. ¿Por qué? Porque el Navigation Controller gestiona la barra de estado por sí mismo.
Solución n.º 1 (simple): Sobrescribir la propiedad en el Navigation Controller.
\n\nclass CustomNavigationController: UINavigationController {\n override var preferredStatusBarStyle: UIStatusBarStyle {\n return topViewController?.preferredStatusBarStyle ?? .default\n }\n}\n\nSolución n.º 2 (limpia): Usar childForStatusBarStyle. Es una forma más flexible que delega la gestión al controlador hijo.
class CustomNavigationController: UINavigationC