SWIFT - 在ScrollView内部的WKWebView中的HTML滚动事件

时间:2016-02-02 14:07:40

标签: ios swift uiscrollview wkwebview

我有一个用于测试目的的网页(https://storage.googleapis.com/htmltestingbucket/nested_scroll_helper.html),只打印html在固定标题中捕获的滚动事件的计数器

当WKWebView是片段中唯一可滚动的元素时,一切都很好,WebView将滚动事件发送到页面

如果我想在WebView的上方和下方添加原生元素,那么事情会变得复杂得多。

UIScrollView  
    UILabel
    WKWebView
    UILabel

我知道在ScrollView中使用WebView并不好,但我必须在html文档中提供混合内容和正确滚动事件的单一滚动体验。我发现了很多关于此问题的问题,但我无法创建完整的端到端解决方案。

2 个答案:

答案 0 :(得分:5)

<强>更新 好的,我花了一些时间才明白你要做什么。

我知道你想保留外部scrollView,但我很确定它不可能实现你想要做的事情(只有这样才能设置outerScrollView.delegate = webView - 但是不起作用对我来说,当我尝试时)

我认为最好的解决方案是:

  1. 删除外部scrollView
  2. 将webView的contentInsets设置为您需要的顶部和底部的任何高度。例如。为100pt:webView.contentInset = UIEdgeInsetsMake(100,0,100,0);
  3. 将您的UIElements作为子视图添加到UIWebView而不是UIScrollView(基本上是您使用contentInsets创建的可用空间)
  4. 之前(其他方式):

    1. 设置UIWebView的高度限制
    2. 将高度约束存储为UIViewController
    3. 中的IBOutlet
    4. webView.scrollView.scrollEnabled = NO;或故事板
    5. 中设置viewDidLoad
    6. 加载webView后,立即提取其内容高度webView.scrollView.contentSize.height
    7. 使用它的值更新UIWebView高度约束s content height via self.webViewContentHeightConstraint.constant = webView.scrollView.contentSize.height
    8. 调用[self.scrollView layoutIfNeeded];确保您的视图再次呈现
    9. 不要忘记做第4步和第4步。 5每当webView完成加载内容时

      enter image description here

答案 1 :(得分:0)

你在scrollview中基本上有一个scrollview。你觉得那会怎么样?我会将标签添加到WebView中的HTML中。看不出他们为什么需要原生的原因。

或者,您可以尝试将标签添加到UIWebView的UIScrollView中。这是它的第一个子视图。不确定是否需要调整scrollview insets。注入html可能会更可靠。