iOS:仅隐藏作为 UINavigationController 根的一个视图控制器的导航栏?

Nik*_*unj 2 multithreading uinavigationbar navigationbar ios swift

我只想隐藏一个视图控制器的导航栏,该视图控制器是 UINavigationController 的根视图控制器。

目前我正在使用下面的代码来隐藏特定视图控制器的导航栏。

  • 要隐藏导航栏,
    override func viewWillAppear(_ animated: Bool) {
        self.navigationController?.isNavigationBarHidden = true
        super.viewWillAppear(animated)
    }
Run Code Online (Sandbox Code Playgroud)
  • 要显示其他视图控制器的导航栏,
    override func viewWillDisappear(_ animated: Bool) {
        self.navigationController?.isNavigationBarHidden = false
        super.viewWillDisappear(animated)
    }
Run Code Online (Sandbox Code Playgroud)

当我尝试使用此代码时,应用程序在 iOS 13 设备中崩溃,因为线程冲突:预期主线程。

请检查我使用上面的代码隐藏导航栏时遇到的问题,

iOS 13:线程冲突:预期是主线程

请告诉我是否有其他方法可以仅隐藏一个视图控制器的导航栏。

Nik*_*unj 10

我从我的一位朋友那里得到了另一种隐藏/显示导航栏的方法。

  • 为 NavigationController 设置委托:
navigationController.delegate = self
Run Code Online (Sandbox Code Playgroud)
  • 将每个 ViewController 的导航栏全部隐藏/显示在一处
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    let hide = (viewController is YourVC)
    navigationController.setNavigationBarHidden(hide, animated: animated)
}
Run Code Online (Sandbox Code Playgroud)


小智 6

import UIKit
 class ViewController: UIViewController {

 override func viewWillAppear(_ animated: Bool){
    super.viewWillAppear(animated)
    self.navigationController?.isNavigationBarHidden = true
   }
 override func viewWillDisappear(_ animated: Bool){
    super.viewWillDisappear(animated)
    self.navigationController?.isNavigationBarHidden = false
   }
Run Code Online (Sandbox Code Playgroud)

}