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.

Aby Mathew
sumber
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)
}
Penunggang
sumber
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)
}
Michael Garito
sumber
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)
}
Deepesh
sumber
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)
    }
Ankahathara
sumber
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;
}
Dilip Jangid
sumber
3

Cara untuk menampilkan Bilah Navigasi di Swift:

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

Cara untuk menyembunyikan Bilah Navigasi di Swift:

self.navigationController?.setNavigationBarHidden(true, animated: true)
self.navigationController?.navigationBar.isHidden = true
self.navigationController?.isNavigationBarHidden = true
Mahesh Chaudhari
sumber
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

Zar E Ahmer
sumber
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.

menggambar ..
sumber
0
 private func setupView() {
        view.backgroundColor = .white
        navigationController?.setNavigationBarHidden(true, animated: false)
    }
Wasim
sumber
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)
}
Talha Rasool
sumber
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
    }
}
Pedro Luz
sumber
4
apa Pengontrol Jendela?
MBH
Ini untuk macOS, bukan iOS
Koen.