SwiftUI 如何隐藏 UIKit UINavigationController 的导航栏 (rootViewController: _)?

3

我有一个SwiftUI视图:

struct Content View: View {
  var body: some View {
    Text("Content view")
  }
}

我使用了使用UIKit创建的菜单。在那里,我的视图应该是UIViewControllerUINavigationController。为了显示我的SwiftUI视图,我将我的视图设置在UINavigationController中:

let navigationController = UIHostingController(rootView: Content()).inNavigation()

// inNavigation()
extension UIViewController{
    func inNavigation() -> UIViewController {
        let vc = self
        let navigationController = UINavigationController(rootViewController: self)
        vc.navigationController?.navigationBar.isHidden = true
        vc.navigationController?.setNavigationBarHidden(true, animated: true)
        vc.navigationController?.isNavigationBarHidden = true
        vc.navigationController?.isToolbarHidden = true
        vc.navigationController?.setToolbarHidden(true, animated: true)
        vc.navigationController?.accessibilityFrame = .zero
        
        navigationController.navigationController?.navigationBar.isHidden = true
        navigationController.navigationController?.setNavigationBarHidden(true, animated: true)
        navigationController.navigationController?.isNavigationBarHidden = true
        navigationController.navigationController?.isToolbarHidden = true
        navigationController.navigationController?.setToolbarHidden(true, animated: true)
        navigationController.accessibilityFrame = .zero
        return navigationController
    }
}

我试图隐藏navigationBar,但它仍然显示:

输入图片说明

1个回答

2
UINavigationController 应该在视图层级中,才能起到作用。
以下是经过测试的工作变体,假设您将其注入到 SceneDelegate 中的窗口中(在 Xcode 11.4 / iOS 13.4 上测试)。
extension UIViewController{
    func inNavigation() -> UIViewController {
        let navigationController = UINavigationController(rootViewController: self)
        DispatchQueue.main.async {
            navigationController.isNavigationBarHidden = true
        }
        return navigationController
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接