Introdução: por que ocultar a Navigation Bar é um problema para iniciantes?
\n\nVocê já se deparou com esta situação: está criando um aplicativo, a primeira tela deve parecer uma landing page em tela cheia, sem a barra cinza no topo, mas na segunda tela a Navigation Bar já é necessária para navegação? Parece lógico simplesmente escrever navigationController?.isNavigationBarHidden = true no viewDidLoad. Mas é aí que a mágica começa: a Navigation Bar pode "reaparecer" ao retornar de outra tela, a animação quebra, ou ela simplesmente não é ocultada.
Esta é uma das perguntas mais populares no Stack Overflow (o tópico "How to hide a navigation bar from first ViewController in Swift?" tem milhares de visualizações). Neste tutorial, abordaremos não apenas a solução básica, mas também os detalhes: como fazer isso de forma elegante, sem bugs de animação, e como adaptar para os padrões modernos do iOS. Se você está procurando uma maneira confiável de ocultar a navigation bar na primeira tela em Swift, está no lugar certo.
\n\nO problema: o que acontece "por baixo dos panos"?
\n\nQuando você usa UINavigationController, ele gerencia a Navigation Bar para todos os controladores filhos. Se você simplesmente a oculta no viewDidLoad do primeiro ViewController, ao navegar para a segunda tela e voltar, a propriedade pode ser redefinida. Por quê?
- \n
- viewDidLoad é chamado apenas uma vez — ao reexibir a tela, o código não será executado. \n
- UINavigationController sincroniza a barra com base no último controlador na pilha. \n
- A animação de transição pode "travar" o estado se os parâmetros
animatednão forem definidos. \n
Mas não se preocupe — a solução é elegante e simples. Vamos escrever o código.
\n\nSolução básica: ocultando a Navigation Bar no primeiro ViewController
\n\nA maneira mais direta é sobrescrever o método viewWillAppear. Por que aqui? Porque este método é chamado toda vez antes da tela aparecer, ao contrário do viewDidLoad. Dessa forma, mesmo após retornar de outra tela, a Navigation Bar será ocultada novamente.
Passo 1: Criando o primeiro ViewController
\n\nSuponha que você tenha um FirstViewController que é a raiz do UINavigationController.
import UIKit\n\nclass FirstViewController: UIViewController {\n\n override func viewWillAppear(_ animated: Bool) {\n super.viewWillAppear(animated)\n // Oculta a Navigation Bar sem animação\n navigationController?.setNavigationBarHidden(true, animated: animated)\n }\n\n override func viewWillDisappear(_ animated: Bool) {\n super.viewWillDisappear(animated)\n // Restaura a Navigation Bar ao sair da tela\n navigationController?.setNavigationBarHidden(false, animated: animated)\n }\n}\n\nObserve: usamos setNavigationBarHidden(_:animated:) com o parâmetro animated. Se passar true, a Navigation Bar será ocultada/exibida com animação sincronizada com a transição. Isso parece profissional.
Passo 2: Configurando a segunda tela
\n\nNa segunda tela (SecondViewController), a Navigation Bar será exibida por padrão. Nenhum código adicional é necessário — ela aparecerá automaticamente ao navegar.
Passo 3: Verificando no Interface Builder ou código
\n\nCertifique-se de que seu UINavigationController está configurado corretamente. Se estiver usando Storyboard, verifique se a primeira tela é o FirstViewController. Se for em código:
let navController = UINavigationController(rootViewController: FirstViewController())\n\nPronto! Execute o aplicativo — a primeira tela ficará sem Navigation Bar, a segunda com ela.
\n\nTécnicas avançadas: animação e SwiftUI
\n\nA solução básica funciona, mas em aplicações reais