我通过 SwiftUI 视图显示 UIViewController,如下所示:
@available(iOS 13, *)
struct WelcomeNavView: UIViewControllerRepresentable {
func makeUIViewController(context: UIViewControllerRepresentableContext<WelcomeNavView>) -> UINavigationController {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let navVc = storyboard.instantiateViewController(withIdentifier: "welcomeNav") as! UINavigationController
return navVc
}
func updateUIViewController(_ uiViewController: UINavigationController, context: UIViewControllerRepresentableContext<WelcomeNavView>) {
}
}
Run Code Online (Sandbox Code Playgroud)
然后我从 ViewController 中呈现它,如下所示:
self.viewController?.present(style: .fullScreen) {
WelcomeNavView()
}
Run Code Online (Sandbox Code Playgroud)
但是,它不会占据整个屏幕,并且 UIHostViewController 颜色显示在顶部和底部:
如何更改 UIHostingViewController 视图的颜色。或者展开它所持有的视图以占据整个屏幕?
另一个简单快速的解决方案是,您可以在演示时忽略安全区域WelcomeNavView()。
例子
iOS 13:
WelcomeNavView().edgesIgnoringSafeArea(.all)
Run Code Online (Sandbox Code Playgroud)
iOS 14 及以上版本:
WelcomeNavView().ignoresSafeArea()
Run Code Online (Sandbox Code Playgroud)
这是解决方案,我遇到了类似的问题,其中我必须将托管视图控制器的背景设置为清晰。
显然, hostingVC 的rootView(可能是我们的 SwiftUI View)和 HostingVC.view 是不同的。
所以这将允许您更改背景颜色。
hostingVC.view.backgroundColor = .clear
Run Code Online (Sandbox Code Playgroud)
当然,使用任何颜色代替“.clear”。
只需记住相应地更改作为 rootView 传递给 HostingVC 的 SwiftUI 视图的颜色,主要是明确这一点,这样它就不会根据上面设置的颜色显示。
Your_SwiftUI_View.background(Color.clear)
Run Code Online (Sandbox Code Playgroud)