webViewHeightConstraint

webViewHeightConstraint

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


func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
    DispatchQueue.main.async {
        print("\nscrollViewDidEndZooming")
        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视图在顶部,底部,左侧和右侧边缘都有约束。我正在尝试使用此高度约束webViewHeightConstraint来确定单元格的高度。

ios - 缩放时,UITableViewCell中的更新约束无法与UIWebView scrollView一起正常使用-LMLPHP

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

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级别。

10-05 20:05