我正在使用 SwiftUI,所以我有一個圍繞 Webview 的包裝器,如下所示:
import SwiftUI
import WebKit
struct WebView: UIViewRepresentable {
var url: String
let webView = WKWebView()
func makeUIView(context: Context) -> WKWebView {
webView.evaluateJavaScript("navigator.userAgent") { (result, error) in
print(result as! String)
}
return webView
}
func updateUIView(_ uiView: WKWebView, context: Context) {
let request = URLRequest(url: URL(string:url)!)
uiView.load(request)
}
}
每當用戶滾動到網站時,我如何執行函式/方法?
uj5u.com熱心網友回復:
要獲得滾動位置更新,您需要創建協調器并覆寫makeCoordinator()方法并回傳協調器的實體。在makeUIView(_:)方法中,只需將滾動視圖委托分配給context.coordinator(在 makeUIView 方法的引數中提供的背景關系物件)
將系結從視圖傳遞給協調器,協調器負責更新該系結。這是代碼
struct WebView: UIViewRepresentable {
var url: String
@Binding var contentOffset: CGPoint
init(url: String, contentOffset: Binding<CGPoint>) {
self.url = url
_contentOffset = contentOffset
}
let webView = WKWebView()
func makeUIView(context: Context) -> WKWebView {
webView.scrollView.delegate = context.coordinator // assign delegation
webView.evaluateJavaScript("navigator.userAgent") { (result, error) in
print(result as! String)
}
return webView
}
func updateUIView(_ uiView: WKWebView, context: Context) {
let request = URLRequest(url: URL(string:url)!)
uiView.load(request)
}
func makeCoordinator() -> Coordinator {
.init(contentOffset: $contentOffset) // create coordinator for delegation
}
class Coordinator: NSObject, UIScrollViewDelegate {
@Binding var contentOffset: CGPoint
init(contentOffset: Binding<CGPoint>) {
_contentOffset = contentOffset
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
contentOffset = scrollView.contentOffset
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/416280.html
標籤:
