首页 文章

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

提问于
浏览
171

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

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

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

以及 viewWillAppear

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

这两种方法都隐藏了所有ViewControllers的导航控制器 .

10 回答

  • 71

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

  • 6

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

    你可以在 viewWillDisappear 取消隐藏 navigationController

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

    Swift 3

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
    
        self.navigationController?.setNavigationBarHidden(false, animated: animated)
    }
    
  • 0

    您还可以为此创建扩展,这样您就可以重复使用扩展,而无需在每个视图控制器中反复执行此扩展 .

    import UIKit
    
    extension UIViewController {
        func hideNavigationBar(){
            // Hide the navigation bar on the this view controller
            self.navigationController?.setNavigationBarHidden(true, animated: true)
    
        }
    
        func showNavigationBar() {
            // Show the navigation bar on other view controllers
            self.navigationController?.setNavigationBarHidden(false, animated: true)
        }
    
    }
    

    所以你可以使用如下的扩展方法

    override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
            hideNavigationBar()
        }
    
        override func viewWillDisappear(_ animated: Bool) {
            super.viewWillDisappear(animated)
            showNavigationBar()
        }
    
  • 116

    在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;
    }
    
  • 0

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

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

    你可以从窗口控制器(Swift3)做到这一点

    class WindowController: NSWindowController {
    
        override func windowDidLoad() {
            super.windowDidLoad()
    
            window?.titleVisibility = .hidden
        }
    }
    
  • 15

    在IOS 8中就是这样

    navigationController?.hidesBarsOnTap = true
    

    但只有当它是 UINavigationController 的一部分时

    当你想要它时,把它弄错

  • 0

    我使用上面的变体,并将我的应用程序的各个部分隔离在不同的NavControllers中 . 这样,我不必重置可见性 . 例如,在启动序列中非常有用 .

  • 217

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

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

相关问题