在缩放时,使用UIWebView scrollView更新UITableViewCell中的约束无法正常工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在缩放时,使用UIWebView scrollView更新UITableViewCell中的约束无法正常工作相关的知识,希望对你有一定的参考价值。

我试图在放大后更新表格视图单元格的高度以匹配UIWebView滚动视图的高度.UIWebView是表格视图单元格的子视图。

func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
    DispatchQueue.main.async {
        print("
scrollViewDidEndZooming")
        print("webView.scrollView.contentSize.height: (self.webView.scrollView.contentSize.height)")
        print("webViewHeightConstraint: (self.webViewHeightConstraint.constant)")

        let height = self.webView.scrollView.contentSize.height
        self.webViewHeightConstraint.constant = height
        myDelegate.reloadTableView()
    }
}

在父控制器中:

func reloadTableView() {
    tableView.beginUpdates()
    tableView.endUpdates() 
}

webview上加载了html内容。问题是,在调用didEndZooming并更新高度约束后,它没有正确设置。高度限制将增加大小,直到。在我看来,在tableView单元格中设置高度约束会以某种方式创建一个反馈循环。

我怎样才能使这项工作达到预期目的? (它应该调整为缩放值,而不会使scrollview的大小无限大。)

更新:在

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: WebViewCell.description(), for: indexPath) as! WebViewCell

    //The cell delegate implements the didFinishLoad() function
    cell.delegate = self

    //TODO: I know this is not efficient, will update later.
    if let html = viewModel.emailInfo?.htmlContent {
        cell.loadHTMLString(html)
    }

    return cell
}

单元格本身位于xib文件中。我现在把视图放在一个虚拟视图中(试图看看这是否解决了我的问题(它没有).Web视图在顶部,底部,左边和右边都有约束.webview也有一个高度这个高度约束,webViewHeightConstraint,我试图用来确定细胞的高度。

enter image description here

这是几个放大和缩小周期后的日志输出。在设置新的高度约束之前打印:

scrollViewDidEndZooming webView.scrollView.contentSize.height:962.0 webViewHeightConstraint:509.0

scrollViewDidEndZooming webView.scrollView.contentSize.height:962.0 webViewHeightConstraint:962.0

scrollViewDidEndZooming webView.scrollView.contentSize.height:1531.0 webViewHeightConstraint:962.0

scrollViewDidEndZooming webView.scrollView.contentSize.height:1549.0 webViewHeightConstraint:1531.0

scrollViewDidEndZooming webView.scrollView.contentSize.height:2566.0 webViewHeightConstraint:1549.0

scrollViewDidEndZooming webView.scrollView.contentSize.height:2566.0 webViewHeightConstraint:2566.0

scrollViewDidEndZooming webView.scrollView.contentSize.height:4779.0 webViewHeightConstraint:2566.0

scrollViewDidEndZooming webView.scrollView.contentSize.height:4779.0 webViewHeightConstraint:4779.0

scrollViewDidEndZooming webView.scrollView.contentSize.height:10989.0 webViewHeightConstraint:4779.0

scrollViewDidEndZooming webView.scrollView.contentSize.height:10989.0 webViewHeightConstraint:10989.0

scrollViewDidEndZooming webView.scrollView.contentSize.height:25110.0 webViewHeightConstraint:10989.0

scrollViewDidEndZooming webView.scrollView.contentSize.height:25110.0 webViewHeightConstraint:25110.0

答案

请尝试使用此代码:

func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
    self.webHeightConstraint.constant = self.webHeightConstraint.constant * scale

    myDelegate?.reloadTableView()
}

这避免了必须引用webViews滚动视图的contentSize,因为在缩小时不会低于webView大小。

现在它不能很好地工作,因为你看到webView缩放到自身,然后它在你完成时捕捉到新的大小,但它总是会像那样,因为在缩放完成之前没有任何更新。

另外,不要忘记适当地设置滚动视图的minimumZoom和maximumZoom级别。

另一答案

我觉得你所做的一切都是动态的,这就是问题,你最好添加一个全局高度数组,最初包含表格单元格的默认高度,每次特定的webview被修改为更改全局中的相应值与该单元格具有相同索引并重新加载tableview的数组,将tableViewCell高度挂钩为IBOutlet

并在cellForRowAt中执行此操作

 cell.heightConOfCell.constant = #coressponding value in global array#

不要忘记在返回单元格之前将它们放到行中

 cell.layoutSubviews()

 cell.layoutIfNeeded()

 return cell

我希望你的问题是你使用动态uitableViewCell高度

另一答案

我认为你给tableview细胞一个固定的高度。

返回高度为UITableViewAutomaticDimension

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

以上是关于在缩放时,使用UIWebView scrollView更新UITableViewCell中的约束无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

UIWebView 缩放问题

UIWebview 缩放 PDF 和大 .图像缩放默认 IOS

在UIWebView上启用缩放/缩放

在 UIWebView 上启用缩放/捏合

防止 UIWebview 上的捏缩放和双击缩放

UIWebView 内部滚动视图