内部带有 UIWebview 的滞后 ScrollView

Posted

技术标签:

【中文标题】内部带有 UIWebview 的滞后 ScrollView【英文标题】:Lagging ScrollView with UIWebview inside 【发布时间】:2013-02-13 15:12:21 【问题描述】:

我在 UIScrollview 中有一个 UIWebview,里面有很多内容。 当 UIWebView 加载的内容真的很大时,它开始滞后。

有谁知道如何解决这个问题? 请记住,只有当 UIWebview 的高度变得相当大时它才会滞后。

提前谢谢你!

【问题讨论】:

【参考方案1】:

如果您阅读UIWebView 上的文档,它明确指出UIWebView 嵌入UITableViewUIScrollView。这样做会导致意想不到的行为,我认为您正在亲身体验。很抱歉带来坏消息。

更新 - Apple Docs 的特定警告

文档专门解决了这个问题。

重要提示:您不应将 UIWebView 或 UITableView 对象嵌入 UIScrollView 对象。如果这样做,可能会导致意外行为 因为两个对象的触摸事件可能会混淆和错误 处理。

Apple reference on UIWebView.

更新 2

在进行了几次搜索(search link,与 cmets 中发布的内容相同)后,我遇到了this SO answer,这可能会提供一些见解。它基本上通过代理监视UIScrollViewUIWebView 中的内容偏移量,以及[UIWebView stringByEvaluatingjavascript:] 的一些巧妙用户使用。虽然有一些缺点(即链接可能无法按预期工作)。但请注意,我们不控制这两个类的内部实现,未来的 ios 更新可能会破坏您的解决方案。

【讨论】:

可能存在解决方法。这就是我在这里问的原因。只要加载的内容不太大,它就可以按预期完美运行。 @Ancientar 是的,但官方文档中存在警告是有原因的。当操作系统试图决定将滚动事件发送到哪里时,可能会发生冲突。 在这种情况下不是。滚动视图实际上并没有那么滞后。即使 UIwebview 有几千个像素的高度。我只是想问问有人知道解决这个问题的方法。 @Ancientar 已经被问了很多(link),所有答案都说同样的话,不要这样做。话虽如此,可以通过编写完全自定义的视图并自己处理触摸事件来解决问题。至于说的问题,不推荐。 我忘了提到 uiwebview 只是 UIview 的子视图,它是滚动视图的阳光视图,因此处理不当的触摸不是问题。我相信它是 UIWebview 的不断绘制。

以上是关于内部带有 UIWebview 的滞后 ScrollView的主要内容,如果未能解决你的问题,请参考以下文章

实现 Scrollview 委托方法时,WKWebview Scroll 变得缓慢和滞后

Swift:在 UIWebview Scroll 上隐藏 UIStackView

webView导致tableview滞后

从 UITableView 加载 UIWebView 仅第一次有效

在UIWebView中停止视频

如何找到带有滞后的零交叉?