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

Lud*_*uda 13 uiscrollview ios swift wkwebview

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

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

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

UIScrollView  
    UILabel
    WKWebView
    UILabel
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*Him 5

更新: 好的,花了我一段时间来了解你想要做什么.

我知道你想保留外部scrollView,但我很确定你不可能实现你想做的事情(唯一的办法就是如果你设置outerScrollView.delegate = webView- 但是当我尝试的时候对我不起作用)

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

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

以前(其他方式):

  1. 设置UIWebView的高度约束
  2. 将高度约束存储为UIViewController中的IBOutlet
  3. 设置webView.scrollView.scrollEnabled = NO;在您的viewDidLoad或故事板中
  4. 加载webView后,立即提取其内容高度 webView.scrollView.contentSize.height
  5. 用它的值更新UIWebView高度约束s content height viaself.webViewContentHeightConstraint.constant =webView.scrollView.contentSize.height
  6. 调用[self.scrollView layoutIfNeeded]; 确保您的视图再次呈现

每当webView完成加载内容时,不要忘记执行步骤4和5

在此输入图像描述


Tap*_*ani 0

基本上,您在滚动视图中有一个滚动视图。你认为这会如何运作?我会将标签添加到 WebView 中的 HTML。不明白为什么他们需要是本地人。

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