在缩放时,使用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
,我试图用来确定细胞的高度。
这是几个放大和缩小周期后的日志输出。在设置新的高度约束之前打印:
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中的约束无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章