WISWebView内部UIScrollView:滚动冲突

时间:2016-10-04 04:59:55

标签: ios uiscrollview uiwebview webkit wkwebview

上下文

我有一个WKWebView我以编程方式嵌入UIView,此UIView嵌入UIScrollView

要想象:

Scene's View Hierarchy

以下是我所做的简化版本:

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

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

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


问题

目前,当我点击WKWebView时,滚动功能无法正常工作。但是一旦我在上面的UIView内轻拍,我就可以再次滚动。我已经在发生的事情下附上了一个GIF。红色部分为WKWebView,绿色部分为UIView


Scrolling problem


我做了什么

  1. 我已使用scrollEnabled禁用了滚动功能,但由于我仍然可以滚动WKWebview,因此无效。

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

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

  4. 参考文献:

1 个答案:

答案 0 :(得分:0)

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

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

好像WKWebview中进行了一些优化,可以防止父级scrollView的大小适合scrollview大小时接收手势。即使插入FLT_EPSILON的大小也可以设置插入WkWebView传递手势。

它仅适用于WKWebView内部的UIScrollView。如果其他UIScrollView中有UIScrollView,则不需要此解决方法。