如何更新 UITableViewCell 约束常量并更新单元格高度

Posted

技术标签:

【中文标题】如何更新 UITableViewCell 约束常量并更新单元格高度【英文标题】:How to update UITableViewCell constraint's constant and update cell's height 【发布时间】:2015-03-31 23:49:41 【问题描述】:

ios8 和自动布局(纯自动布局,没有 heightForRowAtIndexPath:)下,我遇到了自调整单元格大小的问题。

我有两个UITableView 子类。两者都包含某种页眉(静态高度)、页脚(也是静态高度)和具有动态高度的“内容”。第一个动态内容是UILabel,行号设置为0,它就像一个魅力,它在cellForRowAtIndexPath中同步设置(这很重要!)。 NSString 设置为 UILablel.text,瞧。

第二种类型是UIImageView。图像是异步下载的,带有AFNetworkingUIImage 类别。在完成块中,我正在设置 UIImageViewUIImage 并更新计算约束的常量:

这是一个高度限制, 它是一个出口, UIImageView的宽度是固定的,高度是计算出来的 高度取决于图片的大小

现在,我已经尝试过:

UITableViewCell 的子类中调用layoutIfNeeded - 根本不起作用 设置一个委托人,并调用-cellNeedsUpdate:(UITableViewCell *)cell,并使用此方法: 在单元格的 indexpath 处重新加载行 - 它会导致奇怪的滚动行为 调用layoutIfNeeded 并在UITableView 上调用begin/endUpdates - 这个非常明显,随机行出现,单元格的背景颜色发生变化 以上的各种组合 - 导致奇怪的行为或根本不起作用

有什么方法可以正确设置而不会出现滚动问题?

【问题讨论】:

【参考方案1】:

在主线程上,调用:

[tableView beginUpdates];
[tableView endUpdates];

这将强制 tableview 重新计算所有可见单元格的高度。

【讨论】:

正如我之前写的 - 它会导致奇怪的滚动问题 不要打电话给layoutIfNeeded。如果这不起作用,则您的实现可能有问题。您能否上传一个重现此行为的基本示例项目?

以上是关于如何更新 UITableViewCell 约束常量并更新单元格高度的主要内容,如果未能解决你的问题,请参考以下文章

如何在UITableViewCell内部更新UITableView的高度约束

带有约束更新的 UITableViewCell 导致 UITableView 跳来跳去

从 cellForRowAt 更新时,UITableViewCell 中的活动约束不会更新

缩进 UITableViewCell 中的所有自动布局约束

UITableViewCell 约束更新仅在滚动后发生

何时何地根据实际宽度更新 UITableViewCell 子视图的约束