以编程方式滚动到 WKWebView 的底部不起作用
Scrolling to the bottom of the WKWebView programmatically doesn't work
我有一些遗留代码应该稍微更改以符合 Apple 标准,实际上是为了避免使用 UIWebView 并将其更改为 WKWebView 以便能够定期发布应用程序。
遗留部分中专门用于在加载后页面滚动到底部的代码是这样的,它绝对有效:
public func webViewDidFinishLoad(_ webView: UIWebView) {
var scrollHeight: CGFloat = webView.scrollView.contentSize.height - webView.bounds.size.height
if 0.0 > scrollHeight {
scrollHeight = 0.0
}
webView.scrollView.setContentOffset(CGPoint.init(x: 0.0, y: scrollHeight), animated: true)
}
因为我不得不从应用程序中删除 UIWebView 组件,所以我调整了这样的代码。
添加了 WebKit 导入,使我的 class 符合 WKNavigationDelegate 协议并像这样设置委托:
webView.navigationDelegate = self
并实现了如下适当的功能:
public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
var scrollHeight: CGFloat = webView.scrollView.contentSize.height - webView.bounds.size.height
if 0.0 > scrollHeight {
scrollHeight = 0.0
}
webView.scrollView.setContentOffset(CGPoint.init(x: 0.0, y: scrollHeight), animated: true)
}
现在我不明白当 WKWebView 拒绝将页面滚动到底部时我哪里出错了?
找到解决方案,删除我使用的代码并将其切换为以下代码:
public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
webView.evaluateJavaScript("var scrollingElement = (document.scrollingElement || document.body); scrollingElement.scrollTop = scrollingElement.scrollHeight;")
}
我有一些遗留代码应该稍微更改以符合 Apple 标准,实际上是为了避免使用 UIWebView 并将其更改为 WKWebView 以便能够定期发布应用程序。
遗留部分中专门用于在加载后页面滚动到底部的代码是这样的,它绝对有效:
public func webViewDidFinishLoad(_ webView: UIWebView) {
var scrollHeight: CGFloat = webView.scrollView.contentSize.height - webView.bounds.size.height
if 0.0 > scrollHeight {
scrollHeight = 0.0
}
webView.scrollView.setContentOffset(CGPoint.init(x: 0.0, y: scrollHeight), animated: true)
}
因为我不得不从应用程序中删除 UIWebView 组件,所以我调整了这样的代码。
添加了 WebKit 导入,使我的 class 符合 WKNavigationDelegate 协议并像这样设置委托:
webView.navigationDelegate = self
并实现了如下适当的功能:
public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
var scrollHeight: CGFloat = webView.scrollView.contentSize.height - webView.bounds.size.height
if 0.0 > scrollHeight {
scrollHeight = 0.0
}
webView.scrollView.setContentOffset(CGPoint.init(x: 0.0, y: scrollHeight), animated: true)
}
现在我不明白当 WKWebView 拒绝将页面滚动到底部时我哪里出错了?
找到解决方案,删除我使用的代码并将其切换为以下代码:
public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
webView.evaluateJavaScript("var scrollingElement = (document.scrollingElement || document.body); scrollingElement.scrollTop = scrollingElement.scrollHeight;")
}