scrollView 中的 webView 不能滚动?

Posted

技术标签:

【中文标题】scrollView 中的 webView 不能滚动?【英文标题】:webView in scrollView can't be scroll? 【发布时间】:2017-11-01 02:27:40 【问题描述】:

我有一个要求是滚动整个视图,它包含 customView 和 WebView。结构如下图:

因此,我选择 scrollView 作为 superView 使其滚动。我使用 snapkit 来布局所有视图。我向具有customView 和webView 的scrollView 添加了一个containView。如下代码:

func setupScrollView() 
    view.addSubview(scrollView)
    scrollView.snp.makeConstraints  (make) in
        make.edges.equalTo(view)
    

    scrollView.addSubview(containView)
    containView.snp.makeConstraints  (make) in
        make.left.right.equalTo(view)
        make.top.bottom.equalTo(scrollView)
    


func setupHeaderView() 
    containView.addSubview(headerView)
    headerView.snp.makeConstraints  (make) in
        make.left.right.equalTo(view)
        make.top.equalTo(containView)
    


func setupWebView() 
    containView.addSubview(webView)

    webView.navigationDelegate = self
    webView.scrollView.bounces = false
    webView.scrollView.isScrollEnabled = false

    loadLocalhtml()

我已经阅读了一些关于如何获取 webView 高度的文档,它是等待 webView 加载完成,然后设置 webView 的高度。它可以使 scrollView 工作。所以我想遵循这个想法,但是我遇到了不同的情况:

1) webView 加载完成后,我需要加载本地 html 。我需要请求从服务器获取数据。

2)然后我调用了webView的js方法将数据填充到html中。 html 包含图像和文本。

我已经考虑过如何去做。所以我在调用js方法成功时得到了webView的高度。下面的代码:

func updateWebView(_ json: String) 
    let userId = userManager.currentUserId()
    webView.evaluatejavascript("updateData(\(json),'\(userId)')")  [weak self](response, error) in
        guard let strongself = self else  return 
        if error == nil 
          strongself.settingconstraints()
        
    


func settingconstraints() 
    webView.snp.updateConstraints  make in
        make.left.right.equalTo(view)
        make.top.equalTo(headerView.snp.bottom)
        make.height.equalTo(webView.scrollView.contentSize.height)
        make.bottom.equalTo(containView)
    

但是不能滚动,我现在不知道怎么解决?请帮忙。谢谢

【问题讨论】:

【参考方案1】:

你试过给 webView 一个固定的高度和宽度吗? 如果scrollview中内容的大小不大于scrollview本身的大小,就不会滚动!

看起来可能有顶部/底部配对和高度限制可能会导致问题?

【讨论】:

是的,你是对的,首先,我需要给webView一个固定的高度,当观察到contentSize发生变化时,它会更新webView的高度,它会滚动。

以上是关于scrollView 中的 webView 不能滚动?的主要内容,如果未能解决你的问题,请参考以下文章

android中Scrollview嵌套WebView问题

目标C中的Autozoom webview scrollview

无法弄清楚如何在同一 ScrollView 中的 WebView 上方添加自定义视图

防止 Flutter WebView 溢出水平滚动轮播?

swift webView 提出这样的要求你能忍吗?

ScrollView 内的 Android WebView 仅滚动滚动视图