UINavigationController sem barra de navegação?


117

Tenho um aplicativo universal e, na versão para iPad, estou usando UISplitViewControllerpara criar uma interface semelhante ao aplicativo Mail.

Eu estava tendo problemas para enviar novas visualizações de detalhes, então decidi usar um UINavigationControllerpara que eu pudesse simplesmente empurrar e abrir as visualizações conforme necessário. No entanto, não desejo usar a visualização de navegação ou uma barra de ferramentas. Mas não importa o que eu faça, não consigo ocultar a barra de navegação.

Eu tentei desmarcar "Mostra a barra de navegação" no IB e também tentei definir:

[self.navigationController setNavigationBarHidden:YES];

no viewDidLoad/ viewDidAppear/ viewWillAppear. Eu também tentei em cada uma das visualizações que serão enviadas. Nada funciona.

Há algo que estou perdendo aqui? É possível ter um UINavigationControllersem uma barra de ferramentas ou barra de navegação?


Qual é a superclasse da classe de que selfé uma instância?

Respostas:


192

Você deve ser capaz de fazer o seguinte:

self.navigationController.navigationBar.isHidden = true //Swift 5

onde self.navigationController é (obviamente) uma instância de UINavigationController. Parece funcionar para mim, mas eu apenas testei brevemente antes de postar isso.


2
Portanto, no seu caso, self.navigationController.navigationBar.hidden = YES;
Ashwin

4
Isso foi o suficiente! Embora eu acrescente que fui capaz de simplesmente marcar a caixa Oculto da barra de ferramentas do Nagivation no IB em vez de fazer isso por meio de código. Obrigado!
DOOManiac

1
Sim, desculpe por isso. Eu deveria ter percebido que você estava usando IB e mencionado a caixa Oculto em vez de usar código. Recentemente, comecei a criar todas as minhas interfaces inteiramente de maneira programática, sem arquivos .xib, então fui direto a isso para obter minha resposta.
Ashwin

5
Eu chamo isso está em vista; aparecerá no meu controlador de vista assim - (void)viewWillAppear:(BOOL)animated { self.navigationController.navigationBar.hidden = YES; } e funciona
Ali

2
O navBar está oculto, mas a tela do controlador de visualização não se expande para a tela inteira
ArdenDev

40

Se você não quiser uma barra de navegação e quiser que o conteúdo seja ajustado até onde a barra de navegação normalmente estaria, você deve usar

self.navigationController.navigationBarHidden = YES;

Isso dá a você um resultado como este:

insira a descrição da imagem aqui

Considerando que self.navigationController.navigationBar.hidden = YES;dá a você um espaço onde a barra de navegação deveria estar. Como isso:

insira a descrição da imagem aqui


Muito boa distinção na diferença de resultados com o iOS 6. A partir do IOS 7, parece que o espaço foi removido, mas vou esperar que mais pessoas verifiquem se esse é o caso.
Alex Zavatone

39

No Xcode 4.3.2:

  1. Selecione o controlador de navegação no storyboard
  2. Selecione o Inspetor de Atributos no painel Utilitários (à direita)
  3. Na categoria Navigation Controller, você tem duas caixas de seleção:

    [] Mostra a Barra de Navegação

    [] Mostra a Barra de Ferramentas

Funcionou para mim ...


8

Swift 4

Eu escondo isso em view; WillAppear

     override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        self.navigationController?.isNavigationBarHidden = true;
    }

Em seguida, você pode colocá-lo de volta ao pressionar uma segue (se quiser ter o botão Voltar na próxima visualização)

     override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
     {
        self.navigationController?.isNavigationBarHidden = false;
     }

3

Swift 3 programaticamente

self.navigationController.isNavigationBarHidden = true

ou

self.navigationController.navigationBar.isHidden = true

Observação: não vi diferença entre essas duas abordagens de teste no iOS 10.


1

Todas essas respostas ainda deixam um espaço na parte superior para a barra de status - adicione esta linha para removê-la também:

navController.navigationBar.isHidden = true
navController.accessibilityFrame = CGRect.zero
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.