WISWebView内部UIScrollView:滚动冲突

Fai*_*tar 5 webkit uiwebview uiscrollview ios wkwebview

上下文

我有一个WKWebView我以编程方式嵌入一个UIView,这UIView是嵌入在一个UIScrollView.

想象:

场景的视图层次结构

这是我所做的简化版本:

UIScrollView
|
+---- UIView
|    |
|    +-- UIButton
|    |
|    +-- UILabel
|
+---- UIView
     |
     +-- WKWebView
Run Code Online (Sandbox Code Playgroud)

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

document.ontouchmove = function(event) { event.preventDefault(); }
Run Code Online (Sandbox Code Playgroud)



问题

目前,当我点击内部时滚动不起作用WKWebView.但是一旦我回到UIView上面,我就可以再次滚动.我在附件中附上了一个GIF.红色部分是WKWebView绿色部分UIView.


滚动问题



我做了什么

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

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

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


参考文献:

小智 0

我也遇到过同样的问题。我的解决方法是将内容设置为ScrollView这样:

scrollView.contentInset = UIEdgeInsetsMake(FLT_EPSILON, FLT_EPSILON, FLT_EPSILON, FLT_EPSILON);
Run Code Online (Sandbox Code Playgroud)

看起来有一些优化WKWebview可以防止父母scrollView在其尺寸适合scrollview尺寸时接收手势。即使与 的大小一起设置插图也会FLT_EPSILON产生WkWebView传球手势。

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