Como alterar a cor do texto da Status Bar no iOS: 5 erros fatais e como evitá-los
\n\nTodo desenvolvedor iOS já passou pela situação: você escreve o app, escolhe um fundo escuro perfeito para a tela, mas a Status Bar (barra de status) ainda exibe texto preto. Parece, no mínimo, amador, e os usuários comentam: "não consigo ver nada". Soa familiar?
\n\nA pergunta "How to change Status Bar text color in iOS" é uma das mais populares no Stack Overflow, com dezenas de milhares de visualizações. O problema é que iniciantes (e não só) cometem os mesmos erros repetidamente. Neste artigo, vamos analisar 5 erros fatais que arruínam sua Status Bar e mostrar como corrigi-los em Swift. Vamos lá!
\n\nPor que a Status Bar é uma dor de cabeça?
\n\nO iOS é um sistema rigoroso. Ele não permite que você simplesmente pinte a Status Bar como quiser. Tudo é controlado através de UIStatusBarStyle, e se você não conhece o mecanismo exato, o código vira um jogo de adivinhação. Vamos entender sistematicamente.
Erro nº1: Esquecer o Info.plist
\n\nO erro mais comum é tentar alterar o estilo da Status Bar sem permitir isso na configuração do projeto. Por padrão, o iOS gerencia a barra de estado sozinho, e seu código é simplesmente ignorado.
\n\n// ❌ Incorreto: código existe, mas permissão não\noverride var preferredStatusBarStyle: UIStatusBarStyle {\n return .lightContent\n}\n\nSolução: Adicione a chave UIViewControllerBasedStatusBarAppearance no Info.plist e defina-a como YES. Sem isso, seu View Controller não terá direito a voto.
<key>UIViewControllerBasedStatusBarAppearance</key>\n<true/>\n\nAgora o iOS perguntará a cada controlador: "Qual estilo de Status Bar você quer?" — e seu código funcionará.
\n\nErro nº2: Lugar errado para o código
\n\nMuitos iniciantes escrevem preferredStatusBarStyle no método viewDidLoad() ou viewWillAppear(). E se surpreendem que nada muda.
// ❌ Incorreto: isso é uma propriedade, não um método\noverride func viewDidLoad() {\n super.viewDidLoad()\n preferredStatusBarStyle = .lightContent // Não funciona!\n}\n\nAbordagem correta: preferredStatusBarStyle é uma propriedade computada (computed property) que o iOS consulta sempre que precisa atualizar a Status Bar. Ela deve ser declarada no nível da classe, não dentro de um método.
// ✅ Correto\noverride var preferredStatusBarStyle: UIStatusBarStyle {\n return .lightContent\n}\n\nSe você precisar alterar o estilo dinamicamente (por exemplo, ao mudar o tema), use setNeedsStatusBarAppearanceUpdate():
var isDarkMode = false {\n didSet {\n setNeedsStatusBarAppearanceUpdate()\n }\n}\n\noverride var preferredStatusBarStyle: UIStatusBarStyle {\n return isDarkMode ? .lightContent : .default\n}\n\nErro nº3: Ignorar o Navigation Controller
\n\nSe seu aplicativo usa UINavigationController, o preferredStatusBarStyle do controlador filho pode não funcionar. Por quê? Porque o Navigation Controller gerencia a Status Bar por conta própria.
Solução nº1 (simples): Sobrescrever a propriedade no Navigation Controller.
\n\nclass CustomNavigationController: UINavigationController {\n override var preferredStatusBarStyle: UIStatusBarStyle {\n return topViewController?.preferredStatusBarStyle ?? .default\n }\n}\n\nSolução nº2 (limpa): Usar childForStatusBarStyle. Esta é uma forma mais flexível que delega o gerenciamento ao controlador filho.
class CustomNavigationController: UINavigationC