滚动出界时 WKWebView 会发生什么
What happens to WKWebView when scrolled out of bounds
我正在使用分页滚动视图,将不同的 Web 视图显示为页面。滚动视图已设置 clipsToBounds = false
以允许在滚动视图中显示上一页和下一页。
滚动页面时,有一个确切的时刻,WKWebViews 内容变得完全不可见。这恰好发生在 Web 视图离开滚动视图边界的那一刻(见下文)。在某些网站上,超出范围的可见内容与实际内容不同。
只有在使用 WKWebView 而不是 UIWebView 时才会出现这些问题(UIWebView 一切正常)。
是否有人遇到过与 WKWebView 类似的问题并且有解决方案?
编辑:
Github 上现在有一个 示例项目 ,您可以在其中体验错误并尝试使用它:
WKWebView test project
要解决这个问题,我认为您需要使用 UICollectionView。
当单元格出现在屏幕上时,它应该与 WKWebView 一起存在。
1) 你需要像Here
这样放置
下一个问题是使内容分页。
2) 要正确执行此操作,您需要在 collection 上添加 UIScrollView,例如 Here
3) 之后,使你的 UIScrollView 可分页并在 viewdidload 中写入:
collectionView.addGestureRecognizer(scrollView.panGestureRecognizer)
4) 在您收到要在 UICOllectionView 中显示的模型后 - 像
一样更新 UIScrollView 的 contentSize
scrollView.contentSize = CGSize(width: (models.count*(cellWidth+cellIndent) + sectionIndent * 2), height: cellHeight)
5) 实现 UIScrollViewDelegate
extension YourVC: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView == self.scrollView {
collectionView.contentOffset = scrollView.contentOffset
} else if scrollView == self.collectionView {
self.scrollView.contentOffset = scrollView.contentOffset
}
}
}
就是这样。编码愉快 =)
WKWebView 的设计比 UIWebView 的性能更高。如果它不在视图层次结构的顶部,它将停止 运行 网页的某些部分或完全停止呈现它。这里的问题是,一旦网页超出滚动视图的边界,WKWebView 不会认为自己在屏幕上,即使它通过设置 clipsToBounds = false
可见。
最简单的方法是使用 UIWebView。如果出于某种原因您需要 WebKit,请考虑调整您的分页代码,以便您的滚动视图跨越整个视图控制器。
我正在使用分页滚动视图,将不同的 Web 视图显示为页面。滚动视图已设置 clipsToBounds = false
以允许在滚动视图中显示上一页和下一页。
滚动页面时,有一个确切的时刻,WKWebViews 内容变得完全不可见。这恰好发生在 Web 视图离开滚动视图边界的那一刻(见下文)。在某些网站上,超出范围的可见内容与实际内容不同。
只有在使用 WKWebView 而不是 UIWebView 时才会出现这些问题(UIWebView 一切正常)。
是否有人遇到过与 WKWebView 类似的问题并且有解决方案?
编辑: Github 上现在有一个 示例项目 ,您可以在其中体验错误并尝试使用它: WKWebView test project
要解决这个问题,我认为您需要使用 UICollectionView。 当单元格出现在屏幕上时,它应该与 WKWebView 一起存在。
1) 你需要像Here
这样放置下一个问题是使内容分页。 2) 要正确执行此操作,您需要在 collection 上添加 UIScrollView,例如 Here
3) 之后,使你的 UIScrollView 可分页并在 viewdidload 中写入:
collectionView.addGestureRecognizer(scrollView.panGestureRecognizer)
4) 在您收到要在 UICOllectionView 中显示的模型后 - 像
一样更新 UIScrollView 的 contentSizescrollView.contentSize = CGSize(width: (models.count*(cellWidth+cellIndent) + sectionIndent * 2), height: cellHeight)
5) 实现 UIScrollViewDelegate
extension YourVC: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView == self.scrollView {
collectionView.contentOffset = scrollView.contentOffset
} else if scrollView == self.collectionView {
self.scrollView.contentOffset = scrollView.contentOffset
}
}
}
就是这样。编码愉快 =)
WKWebView 的设计比 UIWebView 的性能更高。如果它不在视图层次结构的顶部,它将停止 运行 网页的某些部分或完全停止呈现它。这里的问题是,一旦网页超出滚动视图的边界,WKWebView 不会认为自己在屏幕上,即使它通过设置 clipsToBounds = false
可见。
最简单的方法是使用 UIWebView。如果出于某种原因您需要 WebKit,请考虑调整您的分页代码,以便您的滚动视图跨越整个视图控制器。