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