要使 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/pPE0 著作权归作者所有。请勿转载和采集!

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