Como ocultar a Navigation Bar na primeira tela em Swift: guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que ocultar a Navigation Bar é um problema para iniciantes?

\n\n

Você 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.

\n\n

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\n

O problema: o que acontece "por baixo dos panos"?

\n\n

Quando 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\n
    \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 animated não forem definidos.
  • \n
\n\n

Mas não se preocupe — a solução é elegante e simples. Vamos escrever o código.

\n\n

Solução básica: ocultando a Navigation Bar no primeiro ViewController

\n\n

A 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.

\n\n

Passo 1: Criando o primeiro ViewController

\n\n

Suponha que você tenha um FirstViewController que é a raiz do UINavigationController.

\n\n
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\n

Observe: 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.

\n\n

Passo 2: Configurando a segunda tela

\n\n

Na segunda tela (SecondViewController), a Navigation Bar será exibida por padrão. Nenhum código adicional é necessário — ela aparecerá automaticamente ao navegar.

\n\n

Passo 3: Verificando no Interface Builder ou código

\n\n

Certifique-se de que seu UINavigationController está configurado corretamente. Se estiver usando Storyboard, verifique se a primeira tela é o FirstViewController. Se for em código:

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

Pronto! Execute o aplicativo — a primeira tela ficará sem Navigation Bar, a segunda com ela.

\n\n

Técnicas avançadas: animação e SwiftUI

\n\n

A solução básica funciona, mas em aplicações reais

Blogs

Book Recommendations