Como ocultar uma barra de navegação do primeiro ViewController no Swift?


258

Como ocultar uma barra de navegação do primeiro ViewController ou de um determinado ViewController rapidamente?

Eu usei o seguinte código em viewDidLoad():

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.isNavigationBarHidden = true
}

e também em viewWillAppear:

override func viewWillAppear(animated: Bool) {
    self.navigationController?.isNavigationBarHidden = true
}

Ambos os métodos ocultam o controlador de navegação de todos os ViewControllers.


1
você precisa gerenciá-lo manualmente para todos os viewcontrollers .. você não pode fazê-lo para qualquer um ..
itsji10dra

Respostas:


321

Se você souber que todas as outras visualizações devem ter a barra visível, use-a viewWillDisappearpara defini-la como visível novamente.

Em Swift:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.setNavigationBarHidden(true, animated: animated)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationController?.setNavigationBarHidden(false, animated: animated)
}

1
Esta resposta é mais eficiente. Pense no código repetitivo a cada novo ViewController que você adicionar. stackoverflow.com/a/39679506/5079380
Amr ElAdawy

252

Swift 3

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

    // Hide the navigation bar on the this view controller
    self.navigationController?.setNavigationBarHidden(true, animated: animated)
}

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

    // Show the navigation bar on other view controllers
    self.navigationController?.setNavigationBarHidden(false, animated: animated)
}

3
Com substituindo não se esqueça de chamar os métodos de super: super.viewWillAppear (animada) e super.viewWillDisappear (animada)
NielsKoole

Ele remove o link que diz voltar?
Contras Bulaquena

Eu estava convencido de que não funcionaria bem com o "deslize para trás" no nível visual, mas está tudo bem. Obrigado!
Tbaloga

Nota lateral: self.não é necessária.
Fayer 27/02

No deslize para trás, da vista com a barra de navegação para a vista com a barra de navegação oculta, como reimplementamos o desbotamento da barra de navegação?
precisa saber é o seguinte

77

Você pode reexibir navigationControlleremviewWillDisappear

override func viewWillDisappear(animated: Bool)
{
    super.viewWillDisappear(animated)
    self.navigationController?.isNavigationBarHidden = false
}

Swift 3

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

    self.navigationController?.setNavigationBarHidden(false, animated: animated)
}

21

Você também pode criar uma extensão para isso, para poder reutilizá-la sem implementá-la repetidamente em todos os controladores de exibição.

import UIKit

extension UIViewController {
    func hideNavigationBar(animated: Bool){
        // Hide the navigation bar on the this view controller
        self.navigationController?.setNavigationBarHidden(true, animated: animated)

    }

    func showNavigationBar(animated: Bool) {
        // Show the navigation bar on other view controllers
        self.navigationController?.setNavigationBarHidden(false, animated: animated)
    }

}

Então você pode usar os métodos de extensão como abaixo

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

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        showNavigationBar(animated: animated)
    }

8
Realmente não vale a extensão, não é? :)
Joris Weimar

3
Depende de quantas visualizações você está ocultando / mostrando as barras de navegação. Sinto que, na maioria dos casos, você apenas oculta o primeiro, mas se o fizer muito, a extensão será boa.
precisa saber é o seguinte

Definitivamente, não vale a pena. Não invente algo que já existe.
Thafer Shahin

8

No Swift 3, você pode usar a propriedade isNavigationBarHidden também para mostrar ou ocultar a barra de navegação

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    // Hide the navigation bar for current view controller
    self.navigationController?.isNavigationBarHidden = true;
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    // Show the navigation bar on other view controllers
   self.navigationController?.isNavigationBarHidden = false;
}

3

Maneiras de mostrar a barra de navegação no Swift:

self.navigationController?.setNavigationBarHidden(false, animated: true)
self.navigationController?.navigationBar.isHidden = false
self.navigationController?.isNavigationBarHidden = false

3

Maneiras de ocultar a barra de navegação no Swift:

self.navigationController?.setNavigationBarHidden(true, animated: true)
self.navigationController?.navigationBar.isHidden = true
self.navigationController?.isNavigationBarHidden = true

1
self.navigationController .setNavigationBarHidden (true, animado: true)? funcionou para mim
Nate Uni

0

No IOS 8, faça isso como

navigationController?.hidesBarsOnTap = true

mas somente quando faz parte de um UINavigationController

torná-lo falso quando você quer de volta


0

Eu uso uma variante do exposto acima e isolo seções do meu aplicativo para serem incorporadas em diferentes NavControllers. Dessa forma, não preciso redefinir a visibilidade. Muito útil em sequências de inicialização, por exemplo.


0
 private func setupView() {
        view.backgroundColor = .white
        navigationController?.setNavigationBarHidden(true, animated: false)
    }

0

Chame o método de ocultar definido na exibição Aparecerá e desaparecerá. se você não chamar o método em exibição desaparecerá com status false. Ocultará a barra de navegação na hierarquia de navegação completa

 override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.setNavigationBarHidden(true, animated: true)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    self.navigationController?.setNavigationBarHidden(false, animated:true)
}

Esta é uma resposta de copiar / colar. Qual é a diferença entre sua resposta e as outras 2 ou 3 respostas iguais aqui?
Starsky

-3

Você pode fazer isso no controlador de janela (Swift3)

class WindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        window?.titleVisibility = .hidden
    }
}

4
o que é o controlador de janela?
MBH

Isso é para macOS, não para iOS
Koen.
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.