我有一个用于测试目的的网页(https://storage.googleapis.com/htmltestingbucket/nested_scroll_helper.html),它只打印 html 在固定标题中捕获的滚动事件的计数器
当 WKWebView 是片段中唯一可滚动的元素时,一切都很好,WebView 将滚动事件发送到页面
如果我想在 WebView 的上方和下方添加原生元素,那么事情会变得更加复杂。
UIScrollView
UILabel
WKWebView
UILabel
我知道在 ScrollView 中包含 WebView 不好,但我必须在 html 文档中提供具有混合内容和适当滚动事件的单一滚动体验。我发现了很多关于此事的问题,但我无法创建完整的端到端解决方案。
最佳答案
更新: 好的,我花了一些时间才明白您要做什么。
我知道你想保留外部 ScrollView ,但我很确定你不可能实现你想做的事情(唯一的方法是设置 outerScrollView.delegate = webView
- 但在我尝试时对我不起作用)
我认为最好的解决方案是:
- 移除你的外层 scrollView
- 将 webView 的 contentInsets 设置为您需要的顶部和底部的任何高度。例如。对于 100pt:
webView.contentInset = UIEdgeInsetsMake(100,0,100,0);
- 将您的 UIElement 作为 subview 添加到您的 UIWebView 而不是 UIScrollView(基本上添加到您使用 contentInsets 创建的可用空间中)
以前(其他方式):
- 设置 UIWebView 的高度限制
- 在您的 UIViewController 中将高度约束存储为 IBOutlet
- 在您的
viewDidLoad
或 Storyboard中设置webView.scrollView.scrollEnabled = NO;
- 一旦加载 webView,提取其内容高度
webView.scrollView.contentSize.height
- 通过 self.webViewContentHeightConstraint.constant =
webView.scrollView.contentSize.height
的内容高度值更新 UIWebView 高度约束
- 调用 [self.scrollView layoutIfNeeded];确保您的 View 再次呈现
不要忘记在 webView 完成加载内容时执行步骤 4 和 5
关于ios - SWIFT - ScrollView 内的 WKWebView 中的 HTML 滚动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35155657/