带有嵌入式 UIWebView 的 UIScrollView 在按住后不滚动

Posted

技术标签:

【中文标题】带有嵌入式 UIWebView 的 UIScrollView 在按住后不滚动【英文标题】:UIScrollView with embedded UIWebView not scrolling after holding 【发布时间】:2010-08-09 12:15:43 【问题描述】:

我有一个嵌入在 UIScrollView 中的 UIWebView。调整 webView 的大小,以便滚动视图管理所有滚动(我需要控制滚动)。

在 webView 中,我通过 '-webkit-user-select: none;' 禁用了用户选择

除了一个烦人的细节外,一切都很好。当我在开始滚动大约一秒钟之前按住内容时,scrollView 不会滚动。我最好的猜测是,它与 userSelection 有关。出现复制/粘贴/放大内容所需的时间大致相同,这通常也会禁用滚动。

我没有关于如何解决这个问题的想法。我们将不胜感激任何帮助!

谢谢!

编辑:问题的另一个方面是,非滚动实际上触发了我的 webView 中的 JS-Eventhandler (click、mousedown、mouseup),这导致了令人惊讶的应用程序行为。用户放下手指,等待,滚动,什么都没有发生,然后移开手指,这被认为是点击,从用户的角度来看这是错误的。

【问题讨论】:

嗨,我正在尝试使用 UIScrollView 中的 UIWebView 来实现相同的目的。您能否发布一些关于您如何实现这一目标的代码示例?干杯, 【参考方案1】:

我猜正在发生的事情是,在那短暂的持续时间之后,滚动视图不再将触摸解释为在它的视图上,而是将触摸向下传递到它的内容视图。

您是否尝试过延迟滚动视图的内容触摸?这基本上会告诉滚动视图延迟对触摸事件采取行动,而是短暂监视触摸,如果触摸移动,则它将其识别为用于滚动的滑动手势。如果它不动,它最终会将触摸传递给它的子视图。

scrollView.delaysContentTouches = YES;

我认为即便如此,在滚动视图将沿着响应者链传递触摸事件之前,还有一个标准的延迟时间。如果按住时间过长,它会自然地将其视为按下事件而不是滚动事件。

【讨论】:

delaysContentTouches 已设置为 YES。我切换它没有效果。 如果您上面关于捕获点击的 webview 的评论是正确的,这意味着滚动视图正在传递触摸事件,因为您没有在定时时间内移动手指。这就是它应该做的,否则它将如何处理 webview 中的实际点击?如果标准时间对您来说不够长,则您必须自己处理触摸事件,这是一大堆蠕虫。 如果你不希望 webview 处理触摸,你应该将它的 userInteractionEnabled 设置为 NO。【参考方案2】:

这个问题不再相关。从 ios 5.0 开始,UIWebView 基于真实的 UIScrollView,并且还通过属性公开了 UIScrollView。改用那个。

不要再与嵌入在 UIScrollViews 中的 UIWebViews 混为一谈了。文档明确建议不要这样做。

Relevant Documentation

【讨论】:

以上是关于带有嵌入式 UIWebView 的 UIScrollView 在按住后不滚动的主要内容,如果未能解决你的问题,请参考以下文章

带有 UINavigationBar 的 UIPageViewController 内的 UIWebView

如何在Swift中设置UIWebView的“User-Agent”标头

在UIWebView中停止视频

UIWebView 模态 YouTube 播放器“完成”按钮操作

如何取消 UIWebView 中的文本字段编辑?

IOS6 横向在仅纵向 iPhone 应用程序中从 uiwebview 播放嵌入的 youtube 视频