Jak ukryć pasek nawigacyjny przed pierwszym ViewController w Swift?

258

Jak mogę szybko ukryć pasek nawigacyjny przed pierwszym ViewController lub określonym ViewController?

Użyłem następującego kodu w viewDidLoad():

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

a także na viewWillAppear:

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

Obie metody ukrywają kontroler nawigacji przed wszystkimi ViewControllerami.

Aby Mathew
źródło
1
musisz zarządzać nim ręcznie dla wszystkich
kontrolerów podglądu

Odpowiedzi:

320

Jeśli wiesz, że wszystkie inne widoki powinny mieć pasek widoczny, możesz użyć go, viewWillDisappearaby ustawić go ponownie jako widoczny.

W 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)
}
Rengers
źródło
1
Ta odpowiedź jest bardziej wydajna. Pomyśl o powtarzającym się kodzie przy każdym dodawanym ViewControllerze. stackoverflow.com/a/39679506/5079380
Amr ElAdawy
252

Szybki 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)
}
Michael Garito
źródło
3
Przy nadpisywaniu nie zapomnij wywołać super metod: super.viewWillAppear (animowane) i super.viewWillDisappear (animowane)
NielsKoole 25.10.16
Czy usuwa link z odpowiedzią?
Wady Bulaquena
Byłem przekonany, że to nie zadziała z „przesunięciem wstecz” na poziomie wizualnym, ale wszystko jest w porządku. Dzięki!
tzaloga
Uwaga dodatkowa: self.niepotrzebna.
Fayer
Jak przesunąć pasek nawigacji z powrotem z widoku z paskiem nawigacji do widoku z ukrytym paskiem nawigacji?
T.Okahara,
77

Można odkryć navigationControllerwviewWillDisappear

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

Szybki 3

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

    self.navigationController?.setNavigationBarHidden(false, animated: animated)
}
Deepesh
źródło
21

Możesz również utworzyć rozszerzenie dla tego, abyś mógł ponownie użyć rozszerzenia bez implementowania tego wielokrotnie w każdym kontrolerze widoku.

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)
    }

}

Możesz więc użyć metod rozszerzenia, jak poniżej

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

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        showNavigationBar(animated: animated)
    }
Ankahathara
źródło
7
Naprawdę nie warte przedłużenia, prawda? :)
Joris Weimar,
3
Zależy od tego, ile widoków ukrywasz / wyświetlasz paski nawigacji. Wydaje mi się, że w większości przypadków ukrywasz tylko pierwszy, ale jeśli często to robisz, rozszerzenie jest przyjemne.
jnwagstaff
Zdecydowanie nie warto. Nie wymyślaj czegoś, co już istnieje.
Thafer Shahin
8

W Swift 3 możesz użyć właściwości isNavigationBarHidden, aby wyświetlić lub ukryć pasek nawigacji

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;
}
Dilip Jangid
źródło
3

Sposoby wyświetlania paska nawigacji w Swift:

self.navigationController?.setNavigationBarHidden(false, animated: true)
self.navigationController?.navigationBar.isHidden = false
self.navigationController?.isNavigationBarHidden = false
Mahesh Chaudhari
źródło
3

Sposoby ukrywania paska nawigacji w Swift:

self.navigationController?.setNavigationBarHidden(true, animated: true)
self.navigationController?.navigationBar.isHidden = true
self.navigationController?.isNavigationBarHidden = true
Mahesh Chaudhari
źródło
1
self.navigationController? .setNavigationBarHidden (prawda, animacja: prawda) działała dla mnie
Nate Uni
0

W IOS 8 zrób to

navigationController?.hidesBarsOnTap = true

ale tylko wtedy, gdy jest częścią UINavigationController

zrób to, gdy chcesz to odzyskać

Zar E Ahmer
źródło
0

Używam wariantu powyższego i izoluję sekcje mojej aplikacji, aby były osadzone w różnych NavControllerach. W ten sposób nie muszę resetować widoczności. Na przykład bardzo przydatne w sekwencjach startowych.

rysował..
źródło
0
 private func setupView() {
        view.backgroundColor = .white
        navigationController?.setNavigationBarHidden(true, animated: false)
    }
Wasim
źródło
0

Wywołaj metodę set hide w widoku Pojawi się i zniknie. jeśli nie wywołasz metody, widok zniknie ze statusem false. Ukryje pasek nawigacji w pełnej hierarchii nawigacji

 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)
}
Talha Rasool
źródło
To jest odpowiedź kopiuj / wklej. Jaka jest różnica między twoją odpowiedzią a pozostałymi 2 lub 3 równymi odpowiedziami tutaj?
Starsky
-3

Możesz to zrobić z poziomu kontrolera okien (Swift3)

class WindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        window?.titleVisibility = .hidden
    }
}
Pedro Luz
źródło
4
co to jest kontroler okien?
MBH
To jest dla systemu macOS, a nie iOS
Koen.