【问题标题】:Creating WebView using SwiftUI 2.0 can't create a view from UIViewRepresentable使用 SwiftUI 2.0 创建 WebView 无法从 UIViewRepresentable 创建视图
【发布时间】:2021-05-03 19:00:00
【问题描述】:

我正在尝试在 SwiftUI 2.0 Xcode 12.4 中创建一个 WebView 视图,但它太新了,我找不到很好的答案和最佳实践示例。对于下面的代码,我收到以下错误。

类型“SwiftUIWebView”不符合协议“UIViewRepresentable”

另外设置配置已更改,我无法正确启用 .allowsContentJavaScript。尝试将其添加到“perfs”会触发一个错误,抱怨不喜欢 Bool。

import SwiftUI
import WebKit

struct SwiftUIWebView: UIViewRepresentable {
    let url: URL?
    func makeUIView(context: Context) -> some WKWebView {
        let prefs = WKWebpagePreferences()
        let config = WKWebViewConfiguration()
        config.defaultWebpagePreferences = prefs
        return WKWebView(frame: .zero, configuration: config)   //frame CGRect
    }
    func updateUIView(_ uiView: WKWebView, context: Context) {
        guard let myURL = url else { return }
        let request = URLRequest(url: myURL)
        uiView.load(request)
    }
}

【问题讨论】:

    标签: swiftui


    【解决方案1】:

    从此行中删除some:

    func makeUIView(context: Context) -> some WKWebView {
    

    some 是处理泛型和不透明类型时使用的特定关键字(请参阅此链接了解更多信息:What is the `some` keyword in Swift(UI)?)。在这种情况下,您不需要泛型化 WKWebView,因为您确切知道它是什么。

    您可以通过以下方式设置prefs.allowsContentJavaScript 属性:

    prefs.allowsContentJavaScript = true
    

    【讨论】:

    • 这就是最终奏效的方法。摆脱“一些”并拒绝将其添加到 perfs 所以这样做并且它可以工作:``` func makeUIView(context: Context) -> WKWebView { let config = WKWebViewConfiguration() config.defaultWebpagePreferences.allowsContentJavaScript = true return WKWebView(frame: .zero, configuration: config) //frame CGRect } ```
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多