如何隐藏导航栏从第一个ViewController在Swift?

我如何隐藏导航栏从第一个ViewController或一个特定的ViewController在swift?

我在viewDidLoad()中使用了以下代码:

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

viewWillAppear:

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

这两种方法都对所有viewcontroller隐藏导航控制器。

286360 次浏览

你可以在viewWillDisappear中取消隐藏navigationController

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

斯威夫特3

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


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

如果您知道所有其他视图都应该使该栏可见,则可以使用viewWillDisappear将其再次设置为可见。

迅速:

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

斯威夫特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)
}

在Swift 3中,你可以使用isNavigationBarHidden属性来显示或隐藏导航栏

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

你可以从窗口控制器(Swift3)来做

class WindowController: NSWindowController {


override func windowDidLoad() {
super.windowDidLoad()


window?.titleVisibility = .hidden
}
}

你也可以为此创建一个扩展,这样你就可以重用扩展,而不必在每个视图控制器中反复实现这个。

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


}

因此,您可以使用如下所示的扩展方法

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


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

在IOS 8中这样做

navigationController?.hidesBarsOnTap = true

但仅当它是UINavigationController的一部分时

当你想要回它时,把它设为false

我使用了上面的一个变体,并将应用程序的各个部分嵌入到不同的navcontroller中。这样,我就不必重置可见性。例如,在启动序列中非常有用。

在Swift中隐藏导航栏的方法:

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

在Swift中显示导航栏的方法:

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

替代

在viewDidLoad中使用此设置

title = "Madman"
navigationController?.isNavigationBarHidden = false
navigationController?.navigationBar.prefersLargeTitles = true
navigationItem.largeTitleDisplayMode = .always

检查Collectionview, scrollview或tableView的约束

 NSLayoutConstraint.activate([
tableView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
])

在视图中调用set hide方法Will appear和Disappear。如果不调用,视图中的方法将消失,状态为false。它将在完整的导航层次结构中隐藏导航栏

 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)
}
    /*.  Swift 5  */
let controller =  self.storyboard?.instantiateViewController(withIdentifier: "sc_userNavigation") as! UserNavigationViewController
let navigationController = UINavigationController(rootViewController: controller)
navigationController.setNavigationBarHidden(true, animated: false)
navigationController.modalPresentationStyle = .fullScreen
self.present(navigationController, animated: false, completion: nil)

想在第一个视图控制器上隐藏导航栏

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

想在第二个视图控制器上显示导航栏

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