要使WKWebView自适应高度,您可以使用GeometryReader和WebView的evaluateJavaScript方法来动态获取WebView的内容高度并将其应用于WebView的frame。

以下是一个示例代码:

import SwiftUI
import WebKit

struct WebView: UIViewRepresentable {
    let request: URLRequest
    
    func makeUIView(context: Context) -> WKWebView {
        let webView = WKWebView()
        webView.scrollView.isScrollEnabled = false
        return webView
    }
    
    func updateUIView(_ uiView: WKWebView, context: Context) {
        uiView.load(request)
        
        // 使用evaluateJavaScript方法获取内容高度
        uiView.evaluateJavaScript("document.documentElement.scrollHeight", completionHandler: { (height, error) in
            if let height = height as? CGFloat {
                // 将内容高度应用于WebView的frame
                uiView.frame.size.height = height
            }
        })
    }
}

struct ContentView: View {
    var body: some View {
        GeometryReader { geometry in
            ScrollView {
                WebView(request: URLRequest(url: URL(string: "https://www.example.com")!))
                    .frame(width: geometry.size.width, height: geometry.size.height)
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

在上述代码中,我们首先创建了一个名为WebView的UIViewRepresentable结构体,该结构体表示了一个WKWebView。在makeUIView方法中,我们创建了一个新的WKWebView,并将其返回作为UIView。在updateUIView方法中,我们加载WebView的请求,并使用evaluateJavaScript方法获取内容的高度。然后,我们将内容高度应用于WebView的frame。

在ContentView中,我们使用GeometryReader将WebView放置在一个ScrollView中,并将其frame设置为GeometryReader的大小。这样,WebView将自动适应其父视图的大小。

请注意,您需要将https://www.example.com替换为要加载的实际网址

swiftui wkwebview自适应高度

原文地址: https://www.cveoy.top/t/topic/h6Lb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录