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.