SwiftUI WKWebView 自适应高度实现指南
要使 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 替换为要加载的实际网址。
原文地址: https://www.cveoy.top/t/topic/pPE0 著作权归作者所有。请勿转载和采集!