首页 > 解决方案 > WKWebView 不显示在操场上

问题描述

当我在 Xcode 11.5 Playground 上运行以下代码时,会显示文本视图,但不会显示自定义视图 WebView。我也没有收到任何错误。

import SwiftUI
import PlaygroundSupport
import WebKit

struct webView: View {
    var body: some View {
        VStack {
            Text("Test")
            WebView(request: URLRequest(url: URL(string: "http://www.google.com")!))
        }
    }
}
PlaygroundPage.current.setLiveView(webView())

struct WebView : NSViewRepresentable {
    
    var request: URLRequest
    
    func makeNSView(context: Context) -> WKWebView  {
        let preferences = WKPreferences()
        preferences.javaScriptEnabled = true

        let config = WKWebViewConfiguration()
        config.preferences = preferences
        let webView = WKWebView(frame: .zero, configuration: config)
        webView.frame = NSRect(x: 0, y: 0, width: 400, height: 300)
        DispatchQueue.main.async {
            webView.load(self.request)
        }
        return webView
    }
    
    func updateNSView(_ nsView: WKWebView, context: Context) {
    }
    
}

相同的代码适用于主代码,但不适用于 Playground。我不确定出了什么问题。

标签: xcodemacosswiftui

解决方案


您需要明确指定框架(因为没有窗口)

PlaygroundPage.current.setLiveView(webView().frame(width: 400, height: 300))

推荐阅读