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.


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

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

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

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

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

3

Möglichkeiten, die Navigationsleiste in Swift anzuzeigen:

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

3

Möglichkeiten, die Navigationsleiste in Swift auszublenden:

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

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


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.


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

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

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

4
Was ist der Window Controller?
MBH

Dies ist für macOS, nicht für iOS
Koen.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.