【问题标题】:setNavigationBarHidden not working programmatically?setNavigationBarHidden 不能以编程方式工作?
【发布时间】:2017-07-13 05:48:47
【问题描述】:

我正在尝试以编程方式创建不同的视图控制器,其中第一个不应该显示导航栏,但第二个应该。我似乎无法做任何事情来让第二个视图控制器显示导航栏。所有代码都编译得很好,推动控制器的按钮也能正常工作,因为第二个屏幕应该变绿了。

这是 AppDelegate:

class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    window = UIWindow(frame: UIScreen.main.bounds)
    window?.makeKeyAndVisible()

    let layout = UICollectionViewFlowLayout()
    let startupScreenController = StartupScreenController(collectionViewLayout: layout)
    window?.rootViewController = UINavigationController(rootViewController: startupScreenController)

    application.statusBarStyle = .lightContent

    return true
}

这是第一个视图控制器:

func skipButtonPressed() {

    let layout = UICollectionViewFlowLayout()
    let secondViewController = SecondViewController(collectionViewLayout: layout)
    self.navigationController?.pushViewController(secondViewController, animated: true)

}

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

    // Hide the navigation bar on this view controller
    self.navigationController?.setNavigationBarHidden(true, animated: animated)
}

这是第二个视图控制器:

class SecondViewController: UICollectionViewController {

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

    // Show the Navigation Bar on this view controller

    self.navigationController?.setNavigationBarHidden(false, animated: animated)
    UINavigationBar.appearance().barTintColor = UIColor(red: 24/255, green: 24/255, blue: 24/255, alpha: 1  )
}

override func viewDidLoad() {
    super.viewDidLoad()

    collectionView?.backgroundColor = UIColor.green

}

【问题讨论】:

    标签: ios swift swift3


    【解决方案1】:

    对于我的项目,它只有在我将它添加到 viewWillLayoutSubviews() 时才有效。

    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
    
        self.navigationController?.navigationBar.isHidden = true
    }
    

    【讨论】:

      【解决方案2】:

      按以下方式隐藏navigation bar。设置false 启用返回

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

      【讨论】:

        【解决方案3】:

        你必须像下面那样做。

        func viewDidLoad() {
            super.viewDidLoad()
            self.navigationController?.setNavigationBarHidden(false, animated: animated)
        }
        

        【讨论】:

        • 别忘了加电话super.viewDidLoad()
        • 不客气..... :) 您应该按照 stackoverflow 指南接受正确答案,以便其他人可以在遇到相同问题时获得帮助! @unicorn_surprise
        • 这不会编译,因为animated 没有在任何地方声明。
        【解决方案4】:

        在ViewDidLoad中可以直接使用到那个导航条码。

          override func viewDidLoad() {
        
          self.navigationController?.setNavigationBarHidden(false, animated: 
           animated)
           }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-11
          • 2014-05-04
          相关资源
          最近更新 更多