swift - SwiftUI 隐藏 UIKit UINavigationController(rootViewController: _) 的导航栏
问题描述
我有一个 SwiftUI 视图:
struct Content View: View {
var body: some View {
Text("Content view")
}
}
我使用了用 UIKit 创建的菜单。我的观点应该是UIViewController
or 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
}
}
我试图隐藏导航栏。但它仍然显示:
解决方案
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
}
}