Bagaimana cara menyembunyikan bilah navigasi dari ViewController pertama di Swift?


258

Bagaimana saya bisa menyembunyikan bilah navigasi dari ViewController pertama atau ViewController tertentu di swift?

Saya menggunakan kode berikut di viewDidLoad():

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

dan juga pada viewWillAppear:

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

Kedua metode menyembunyikan pengontrol navigasi dari semua ViewControllers.


1
Anda perlu mengelolanya secara manual untuk semua viewcontrollers .. Anda tidak dapat melakukannya untuk siapa pun ..
itsji10dra

Jawaban:


321

Jika Anda tahu bahwa semua tampilan lain akan membuat bar terlihat, Anda dapat menggunakannya viewWillDisappearuntuk mengaturnya agar terlihat lagi.

Dalam 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
Jawaban ini lebih efisien. Pikirkan kode berulang dengan setiap ViewController baru yang Anda tambahkan. stackoverflow.com/a/39679506/5079380
Amr ElAdawy

252

Cepat 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
Dengan mengganti jangan lupa untuk memanggil metode super: super.viewWillAppear (animasi) dan super.viewWillDisappear (animasi)
NielsKoole

Apakah itu menghapus tautan yang mengatakan kembali?
Kontra Bulaquena

Saya yakin itu tidak akan bekerja dengan baik dengan "gesek kembali" pada tingkat visual, tetapi semuanya baik-baik saja. Terima kasih!
tzaloga

Catatan: self.tidak diperlukan.
Fayer

Di usap belakang, dari tampilan dengan bilah navigasi ke tampilan dengan bilah navigasi tersembunyi, bagaimana kita menerapkan kembali memudar bilah navigasi?
T.Okahara

77

Anda dapat unhide navigationControllerdiviewWillDisappear

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

Cepat 3

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

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

21

Anda juga dapat membuat ekstensi untuk ini sehingga Anda akan dapat menggunakan kembali ekstensi tanpa menerapkannya lagi dan lagi di setiap pengontrol tampilan.

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

}

Jadi Anda bisa menggunakan metode ekstensi seperti di bawah ini

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

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

8
Tidak terlalu layak dengan ekstensi, bukan? :)
Joris Weimar

3
Tergantung pada berapa banyak tampilan yang Anda sembunyikan / tampilkan bilah nav. Saya merasa seperti kebanyakan kasus Anda hanya menyembunyikan yang pertama tetapi jika Anda sering melakukannya ekstensi itu bagus.
jnwagstaff

Jelas, itu tidak sepadan. Jangan menemukan sesuatu yang sudah ada.
Thafer Shahin

8

Di Swift 3, Anda dapat menggunakan properti isNavigationBarHidden juga untuk menampilkan atau menyembunyikan bilah navigasi

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

Cara untuk menampilkan Bilah Navigasi di Swift:

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

3

Cara untuk menyembunyikan Bilah Navigasi di Swift:

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

1
self.navigationController? .setNavigationBarHidden (true, animated: true) bekerja untuk saya
Nate Uni

0

Di iOS 8 lakukan seperti itu

navigationController?.hidesBarsOnTap = true

tetapi hanya ketika itu merupakan bagian dari UINavigationController

buatlah itu salah ketika Anda menginginkannya kembali


0

Saya menggunakan varian di atas, dan mengisolasi bagian dari aplikasi saya untuk disematkan di NavControllers yang berbeda. Dengan cara ini, saya tidak perlu mengatur ulang visibilitas. Sangat berguna dalam urutan startup, misalnya.


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

0

Panggil metode setel sembunyikan dalam tampilan Akan muncul dan Hilang. jika Anda tidak akan memanggil metode dalam tampilan akan menghilang dengan status false.It akan menyembunyikan bilah navigasi dalam hierarki navigasi lengkap

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

Ini adalah respons salin / tempel. Apa perbedaan antara respons Anda dan 2 atau 3 respons yang sama di sini ??
Starsky

-3

Anda dapat melakukannya dari pengontrol jendela (Swift3)

class WindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        window?.titleVisibility = .hidden
    }
}

4
apa Pengontrol Jendela?
MBH

Ini untuk macOS, bukan iOS
Koen.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.