我正在尝试在放大后更新表视图单元格的高度以匹配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
来确定单元格的高度。这是放大和缩小几个周期后的日志输出。这是在设置新的高度限制之前打印的:
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级别。