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

标签 ios swift uiscrollview wkwebview

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

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

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

UIScrollView  
    UILabel
    WKWebView
    UILabel

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

最佳答案

更新: 好的,我花了一些时间才明白您要做什么。

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

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

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

以前(其他方式):

  1. 设置 UIWebView 的高度限制
  2. 在您的 UIViewController 中将高度约束存储为 IBOutlet
  3. 在您的viewDidLoad 或 Storyboard中设置webView.scrollView.scrollEnabled = NO;
  4. 一旦加载 webView,提取其内容高度 webView.scrollView.contentSize.height
  5. 通过 self.webViewContentHeightConstraint.constant = webView.scrollView.contentSize.height的内容高度值更新 UIWebView 高度约束
  6. 调用 [self.scrollView layoutIfNeeded];确保您的 View 再次呈现

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

enter image description here

关于ios - SWIFT - ScrollView 内的 WKWebView 中的 HTML 滚动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35155657/

相关文章:

ios - SIP通信开源

ios - 单击按钮会隐藏键盘,并且键盘弹起时不会执行操作

ios - UIPageViewController 手势正在调用 viewControllerAfter : but doesn't animate

ios - 您可以在不使用 Core Data 的情况下检测 TableView 的内容吗?

ios - 如何在 swift 中以编程方式在 Storyboard对象之前添加对象

Swift - scrollViewDidScroll 不适用于 WKWebView

ios - 将 UITableView 滑动到屏幕上,继续滑动?

ios - 应用程序启动后检查 iOS 应用程序互联网连接

ios - 主详细信息应用程序indexPathForSelectedRow问题

ios - ZoomToRect后新CGRect的UIScrollview计算