Bir gezinti çubuğunu Swift'teki ilk ViewController'dan nasıl gizleyebilirim?


258

Bir gezinti çubuğunu hızlı bir şekilde ilk ViewController'dan veya belirli bir ViewController'dan nasıl gizleyebilirim?

Aşağıdaki kodu kullandım viewDidLoad():

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

ve ayrıca viewWillAppear:

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

Her iki yöntem de gezinti denetleyicisini tüm ViewController'lardan gizler.


1
Eğer herhangi biri için bunu yapamaz .. tüm viewcontrollers için manuel olarak yönetmesi gereken ..
itsji10dra

Yanıtlar:


321

Diğer tüm görünümlerin çubuğunun görünür olması gerektiğini biliyorsanız, viewWillDisappeartekrar görünür olarak ayarlamak için kullanabilirsiniz.

Swift'te:

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
Bu cevap daha etkilidir. Eklediğiniz her yeni ViewController ile tekrarlayan kodu düşünün. stackoverflow.com/a/39679506/5079380
Amr ElAdawy

252

Hızlı 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
Geçersiz kılma ile süper yöntemleri çağırmayı unutmayın: super.viewWillAppear (animasyonlu) ve super.viewWillDisappear (animasyonlu)
NielsKoole

Geri yazan bağlantıyı kaldırıyor mu?
Eksileri Bulaquena

Ben görsel düzeyde "geri tokatlamak" ile iyi çalışmaz ikna oldu, ama her şey yolunda. Teşekkürler!
tzaloga

Yan not: self.gerekli değil.
Fayer

Geri kaydırmada, gezinme çubuğundaki görünümden gizli gezinme çubuğundaki görünüme kadar, gezinme çubuğunun solmasını nasıl yeniden uygularız?
T.Okahara

77

Sen gösterebilirsin navigationControlleriçindeviewWillDisappear

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

Hızlı 3

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

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

21

Bunun için bir uzantı da oluşturabilirsiniz, böylece bunu her görünüm denetleyicisinde tekrar tekrar uygulamadan yeniden kullanabilirsiniz.

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

}

Böylece aşağıdaki gibi uzantı yöntemlerini kullanabilirsiniz

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

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

8
Uzatmaya gerçekten değmez, değil mi? :)
Joris Weimar

3
Gezinme çubuklarını kaç kez gizlediğinize / gösterdiğinize bağlıdır. Çoğu durumda sadece ilkini gizlediğinizi hissediyorum ama çok yaparsanız uzantı güzel.
jnwagstaff

Kesinlikle, buna değmez. Zaten var olan bir şeyi icat etme.
Thafer Shahin

8

Swift 3'te, gezinme çubuğunu göstermek veya gizlemek için isNavigationBarHidden Özelliğini de kullanabilirsiniz

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

Swift'te Gezinme Çubuğunu göstermenin yolları:

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

3

Swift'te Gezinme Çubuğunu gizleme yolları:

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

1
self.navigationController? .setNavigationBarHidden (true, animated: true) benim için çalıştı
Nate Uni

0

IOS 8'de beğen

navigationController?.hidesBarsOnTap = true

ancak yalnızca bir UINavigationController'ın parçası olduğunda

geri istediğinde yanlış yap


0

Yukarıdakilerin bir varyantını kullanıyorum ve uygulamamın bölümlerini farklı NavControllers'a gömmek için ayırıyorum. Bu şekilde, görünürlüğü sıfırlamak zorunda değilim. Örneğin, başlatma dizilerinde çok yararlıdır.


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

0

Görünümde set hide yöntemini çağırın Görünür ve Yok olur. görünümünde yöntemi çağırmazsanız false durumu ile kaybolacak.Tam navigasyon çubuğunu tam navigasyon hiyerarşisinde gizleyecektir

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

Bu bir kopyala / yapıştır yanıtıdır. Yanıtınız ile diğer 2 veya 3 eşit yanıt arasındaki fark nedir?
Starsky

-3

Bunu pencere denetleyicisinden (Swift3) yapabilirsiniz

class WindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        window?.titleVisibility = .hidden
    }
}

4
Pencere Kontrolörü nedir?
MBH

Bu iOS
Koen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.