在 VStack 中包装 WebView 时出错:无法推断复杂的闭包返回类型;添加显式类型以消除歧义

Posted

技术标签:

【中文标题】在 VStack 中包装 WebView 时出错:无法推断复杂的闭包返回类型;添加显式类型以消除歧义【英文标题】:Error wrapping WebView within VStack: Unable to infer complex closure return type; add explicit type to disambiguate 【发布时间】:2020-06-02 00:15:16 【问题描述】:

我试图将我的自定义结构 WebView 包装在 VStack 中,但出现此错误:

无法推断复杂的闭包返回类型;添加显式类型以消除歧义

WebView 就是这样一个结构体:

struct WebView: UIViewRepresentable 
    var request: URLRequest

    func makeUIView(context: Context) -> WKWebView 
        return WKWebView()
    

    func updateUIView(_ uiView: WKWebView, context: Context) 
        uiView.load(request)
    


这是我的 ContentView 的一部分:

                        ZStack
                            ScrollView

                                VStack(spacing:0)
                                    ZStack

                                        ZStack (alignment: .leading)....offset(y: self.expandedScreen_shown ? 0 : 0)
                                            .clipped()
                                            .background(Color.white)
                                            .foregroundColor(Color.green)
                                            .edgesIgnoringSafeArea(.top)
                                        VStack (alignment: .leading)....frame(height: self.maxHeight)
                                    .zIndex(1)

                                    WebView(request: URLRequest(url: URL(String: "google.com")))


                                    Rectangle()
                                        .fill(Color.white)
                                        .frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)

                                

                            
                            .frame(width: self.expandedScreen_startPoint.width, height: self.expandedScreen_startPoint.height)
                            .background(Color.clear)
                            .cornerRadius(self.expandedScreen_shown ? 0 : 15 )
                            .animation(.easeInOut(duration: 0.3))
                            .offset(x: self.expandedScreen_startPoint.minX, y: self.expandedScreen_startPoint.minY)

                            // ScrollView ends

                            Button(action: ...)....offset(x: (UIScreen.main.bounds.width/2) - 30, y: (-1 * UIScreen.main.bounds.height/2) + 60)
                        
                            // ZStack ends

正如我看到的项目成功地将这个 WebView 包装在 VStack 中一样,我找不到问题出在哪里。更笼统地说,“复杂闭包返回类型”和“显式类型”有什么区别?

提前致谢!

【问题讨论】:

【参考方案1】:

我注意到关于您的 WebView 的两件事。

1) 字符串应该是字符串,并且

2) URL 应该被解包

试试这个:

WebView(request: URLRequest(url: URL(string: "https://google.com")!))

【讨论】:

谢谢!我遇到了一个新问题,即整个 WebView 没有显示出来。我应该用其他视图包装它吗? WebView 曾经在 NavigationView 内部工作,但本项目不需要它。目前,这整个 ZStack 是另一个 ZStack 的不可见部分,它会在点击手势后变得可见。 我的回答是否解决了您的错误?如果是,请将答案标记为正确。至于其他问题,如果没有所有信息,很难说,但通常您不必将 WebView 包装在另一个视图中以使其工作。我建议您将代码分解成小块,而不是全部放在同一个 ZStack 中。 如果网页未显示,请尝试使用 https:// 前缀

以上是关于在 VStack 中包装 WebView 时出错:无法推断复杂的闭包返回类型;添加显式类型以消除歧义的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:在 Column 中包装 Layoutbuilder 和 Text 时出错

SwiftUI:VStack中的VStack,标签被截断

加载 webview 时膨胀类 android.webkit.WebView 时出错

膨胀 WebView XML 时出错

【安卓开发】系统级APP使用webview时出错

如何在WebView中禁用用户文本选择[React-Native]