首页 > 解决方案 > SwiftUI 隐藏 UIKit UINavigationController(rootViewController: _) 的导航栏

问题描述

我有一个 SwiftUI 视图:

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

我使用了用 UIKit 创建的菜单。我的观点应该是UIViewControlleror UINavigationController。为了显示我的 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
    }
}

我试图隐藏导航栏。但它仍然显示:

在此处输入图像描述

标签: swiftswiftuiuikit

解决方案


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

推荐阅读