【发布时间】:2021-01-01 09:32:30
【问题描述】:
我正在开发 SwiftUI,但由于没有 WKWebView,我通过 UIViewRepresentable 创建了它。
这是一些代码:
func makeUIView(context: Context) -> WKWebView {
let jsScript = "var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);"
let userScript = WKUserScript(source: jsScript, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
let wkController = WKUserContentController()
wkController.addUserScript(userScript)
let wkWebConfiguration = WKWebViewConfiguration()
wkWebConfiguration.userContentController = wkController
let webView = WKWebView(frame: .null, configuration: wkWebConfiguration)
webView.translatesAutoresizingMaskIntoConstraints = false
webView.loadHTMLString(htmlBody, baseURL: nil)
return webView
}
func updateUIView(_ uiView: WKWebView, context: Context) {
if let htmlBody = self.htmlBody {
uiView.loadHTMLString(htmlBody, baseURL: nil)
}
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
我需要做的是在按钮点击时滚动到它的底部。
所以在我的 SwiftUI 视图中,我有一个 @State 变量并将其传递给我的 UIViewRepresentable。
这是我尝试过的(在我的 updateUIView 中):
if scrollWebView {
let scrollPoint = CGPoint(x: 0, y: yourWebView.scrollView.contentSize.height - webView.frame.size.height)
webView.scrollView.setContentOffset(scrollPoint, animated: true)
}
但是这段代码(点击按钮)滚动到我的 WkWebView 的顶部。即使我改变了 y 的符号。它总是滚动到顶部而不是底部。
我认为我无法在我的 SwiftUI 视图中实现这一点,而且我找不到滚动到 WKWebView 底部的方法。
我也认为这种行为(因为我可以做 webView.scrollView)与 ScrollView 类似。
有什么帮助吗?
【问题讨论】:
标签: ios swift webview uiscrollview swiftui