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

Posted

技术标签:

【中文标题】SWIFT - ScrollView 内的 WKWebView 中的 HTML 滚动事件【英文标题】:SWIFT - HTML scrolling events in a WKWebView that's inside a ScrollView 【发布时间】:2016-02-02 14:07:39 【问题描述】:

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

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

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

UIScrollView  
    UILabel
    WKWebView
    UILabel

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

【问题讨论】:

【参考方案1】:

更新: 好吧,我花了一段时间才明白你想要做什么。

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

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

    移除你的外层滚动视图 将 webView 的 contentInsets 设置为所需的顶部和底部高度。例如。 100pt : webView.contentInset = UIEdgeInsetsMake(100,0,100,0); 将您的 UIElements 作为 subView 添加到您的 UIWebView 而不是 UIScrollView(基本上是添加到您使用 contentInsets 创建的可用空间中)

以前(其他方式):

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

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

【讨论】:

但是 webview 是如何感知滚动的呢? 它不会因为你不会在 webview 中滚动了。您将只有一个可滚动的视图,即“移动”webview。从而获得完美的单卷体验 我明白了,但这与我们正在寻找的相反。我需要 webview 在滚动时知道滚动 所以你想让 uiwebview 知道你在父 scrollView 中滚动?如果是,我可以调整我的答案。否则,请给我更多的上下文 是的。请调整你的答案【参考方案2】:

你基本上在滚动视图中有一个滚动视图。你认为这将如何运作?我会将标签添加到 WebView 中的 HTML。看不出他们需要本地化的任何理由。

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

【讨论】:

以上是关于SWIFT - ScrollView 内的 WKWebView 中的 HTML 滚动事件的主要内容,如果未能解决你的问题,请参考以下文章

Swift/Xcode - 无法与 ScrollView 中的 View 内的文本框和按钮进行交互

使用swift在scrollview内的stackview中更改uibutton中的标题

Swift - UIScrollView 内的 UICollectionView - 自动布局

使用 AutoLayout 以编程方式将 UILabel 添加到 ScrollView (swift)

ScrollView 中的 IBOutlet 产生 nil

Xcode ScrollView不滚动