UIHostingViewController 背景颜色显示

vik*_*lla 5 swiftui

我通过 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 视图的颜色。或者展开它所持有的视图以占据整个屏幕?

Sun*_*rge 5

另一个简单快速的解决方案是,您可以在演示时忽略安全区域WelcomeNavView()

例子

iOS 13:

WelcomeNavView().edgesIgnoringSafeArea(.all)
Run Code Online (Sandbox Code Playgroud)

iOS 14 及以上版本:

WelcomeNavView().ignoresSafeArea()
Run Code Online (Sandbox Code Playgroud)


shr*_*hah 2

这是解决方案,我遇到了类似的问题,其中我必须将托管视图控制器的背景设置为清晰。

显然, 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)