【问题标题】:WKWebView Inside UIScrollView: Scrolling ConflictWKWebView Inside UIScrollView:滚动冲突
【发布时间】:2017-02-12 03:45:13
【问题描述】:

上下文

我有一个WKWebView,我以编程方式将它嵌入到UIView 中,而这个UIView 嵌入在UIScrollView 中。

可视化:

这是我所做工作的简化版本:

UIScrollView
|
+---- UIView
|    |
|    +-- UIButton
|    |
|    +-- UILabel
|
+---- UIView
     |
     +-- WKWebView

我不希望 WKWebView 滚动,我已通过在页面上注入以下脚本来禁用它。

document.ontouchmove = function(event) { event.preventDefault(); }



问题

目前,当我在WKWebView 内点击时,滚动不起作用。但是,一旦我回到上面的UIView 内,我就可以再次滚动。我在下面附上了发生的事情的 GIF。红色部分是WKWebView,绿色部分是UIView




我做了什么

  1. 我已使用 scrollEnabled 禁用滚动,但它不起作用,因为我仍然可以滚动 WKWebview

    webView.scrollView.scrollEnabled = false
    webView.scrollView.bounces = false
    
  2. 加载网页后注入以下 javascript(当前解决方案)

    document.ontouchmove = function(event) { event.preventDefault(); }
    
  3. 为视图使用静态UITableViewController,但我还是遇到了同样的问题。


参考资料:

【问题讨论】:

  • 我不知道你现在是否已经解决了这个问题,但你不应该使用webView.scrollView.scrollEnabled = NO(而不是...false)来禁用它吗?还是这只是 UIWebView 的情况?

标签: ios uiscrollview uiwebview webkit wkwebview


【解决方案1】:

我也遇到过同样的问题。我的解决方法是在ScrollView 上设置内容插入,如下所示:

scrollView.contentInset = UIEdgeInsetsMake(FLT_EPSILON, FLT_EPSILON, FLT_EPSILON, FLT_EPSILON);

看起来WKWebview 中的一些优化可以防止父scrollView 在其大小适合scrollview 大小时接收手势。即使使用FLT_EPSILON 的大小设置插入,也会使WkWebView 传递手势。

它仅适用于 UIScrollView 内的 WKWebView。当 UIScrollView 在其他 UIScrollView 中时,不需要此解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    相关资源
    最近更新 更多