Wie verstecke ich eine Navigationsleiste vor dem ersten ViewController in Swift?

258

Wie kann ich eine Navigationsleiste schnell vor dem ersten ViewController oder einem bestimmten ViewController ausblenden?

Ich habe den folgenden Code verwendet in viewDidLoad():

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

und auch auf viewWillAppear:

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

Beide Methoden verbergen den Navigationscontroller vor allen ViewControllern.

Aby Mathew
quelle
1
Sie müssen es manuell für alle Viewcontroller verwalten. Sie können es für niemanden tun.
itsji10dra

Antworten:

321

Wenn Sie wissen, dass in allen anderen Ansichten die Leiste sichtbar sein sollte, können Sie viewWillDisappearsie wieder sichtbar machen.

In 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
quelle
1
Diese Antwort ist effizienter. Denken Sie bei jedem neuen ViewController, den Sie hinzufügen, an den sich wiederholenden Code. 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)
}
Michael Garito
quelle
3
Vergessen Sie beim Überschreiben nicht, die Super-Methoden aufzurufen: super.viewWillAppear (animiert) und super.viewWillDisappear (animiert)
NielsKoole
Entfernt es den Link, der zurück sagt?
Nachteile Bulaquena
Ich war überzeugt, dass es mit dem "Zurückwischen" auf visueller Ebene nicht gut funktionieren würde, aber alles ist in Ordnung. Vielen Dank!
Tzaloga
Randnotiz: self.nicht benötigt.
Fayer
Wie implementieren wir beim Zurückwischen von der Ansicht mit der Navigationsleiste zur Ansicht mit der ausgeblendeten Navigationsleiste das Ausbleichen der Navigationsleiste erneut?
T.Okahara
77

Sie können sichtbar machen navigationControllerinviewWillDisappear

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)
}
Deepesh
quelle
21

Sie können auch eine Erweiterung dafür erstellen, damit Sie die Erweiterung wiederverwenden können, ohne dies in jedem View-Controller immer wieder zu implementieren.

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

}

Sie können also die folgenden Erweiterungsmethoden verwenden

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

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        showNavigationBar(animated: animated)
    }
Ankahathara
quelle
8
Die Erweiterung ist es nicht wirklich wert, oder? :)
Joris Weimar
3
Hängt davon ab, wie viele Ansichten Sie die Navigationsleisten ausblenden / anzeigen. Ich habe das Gefühl, dass Sie in den meisten Fällen nur den ersten verstecken, aber wenn Sie viel tun, ist die Erweiterung nett.
jnwagstaff
Auf jeden Fall lohnt es sich nicht. Erfinde nicht, dass etwas schon existiert.
Thafer Shahin
8

In Swift 3 können Sie die isNavigationBarHidden-Eigenschaft auch zum Ein- oder Ausblenden der Navigationsleiste verwenden

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
quelle
3

Möglichkeiten, die Navigationsleiste in Swift anzuzeigen:

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

Möglichkeiten, die Navigationsleiste in Swift auszublenden:

self.navigationController?.setNavigationBarHidden(true, animated: true)
self.navigationController?.navigationBar.isHidden = true
self.navigationController?.isNavigationBarHidden = true
Mahesh Chaudhari
quelle
1
self.navigationController? .setNavigationBarHidden (true, animiert: true) hat für mich gearbeitet
Nate Uni
0

In IOS 8 mach es wie

navigationController?.hidesBarsOnTap = true

aber nur, wenn es Teil eines UINavigationControllers ist

mach es falsch, wenn du es zurück haben willst

Zar E Ahmer
quelle
0

Ich verwende eine der oben genannten Varianten und isoliere Abschnitte meiner App, um sie in verschiedene NavController einzubetten. Auf diese Weise muss ich die Sichtbarkeit nicht zurücksetzen. Sehr nützlich zum Beispiel in Startsequenzen.

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

Rufen Sie die Set-Hide-Methode in der Ansicht auf. Wird angezeigt und verschwindet. Wenn Sie die angezeigte Methode nicht aufrufen, wird sie mit dem Status false ausgeblendet. Die Navigationsleiste wird in der vollständigen Navigationshierarchie ausgeblendet

 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
quelle
Dies ist eine Antwort zum Kopieren / Einfügen. Was ist der Unterschied zwischen Ihrer Antwort und den anderen 2 oder 3 gleichen Antworten hier?
Starsky
-3

Sie können dies über die Fenstersteuerung (Swift3) tun.

class WindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        window?.titleVisibility = .hidden
    }
}
Pedro Luz
quelle
4
Was ist der Window Controller?
MBH
Dies ist für macOS, nicht für iOS
Koen.