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.


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

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

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

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

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

3

Sposoby wyświetlania paska nawigacji w Swift:

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

3

Sposoby ukrywania paska nawigacji w Swift:

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

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ć


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.


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

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

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

4
co to jest kontroler okien?
MBH

To jest dla systemu macOS, a nie iOS
Koen.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.