reloadRowsAtIndexPaths不会更改UItableViewCell的约束

时间:2018-01-24 06:16:12

标签: ios uitableview constraints

这是我的代码。我有条件地设置了高度限制。当我重新加载整个表时它运行良好但不适用于reloadRowsAtIndexPaths

id superView = btn.superview.superview;
NSIndexPath *indexpath = [tbl indexPathForCell:superView];
AddYardTicketItemCell *cell = [tbl cellForRowAtIndexPath:indexpath];
if (cell.constantViewHeight.constant == 0) {
    cell.constantViewHeight.constant = 130;        
}
else
{
cell.constantViewHeight.constant = 0;         
}
[cell layoutIfNeeded];
[tbl reloadRowsAtIndexPaths:@[indexpath] withRowAnimation:UITableViewRowAnimationNone];

3 个答案:

答案 0 :(得分:2)

更改一个单元格的高度需要tableView移动以下所有单元格。所以我猜这就是为什么reloadRowsAtIndexPaths不适合你的原因。尝试改变:

[tbl reloadRowsAtIndexPaths:@[indexpath] withRowAnimation:UITableViewRowAnimationNone];

为:

[tbl beginUpdates];
[tbl setNeedsDisplay];
[tbl endUpdates];

答案 1 :(得分:0)

尝试添加委托方法heightForRowAtIndexPath,而不是在cellForRowAtIndexPath中提供高度.Reload将起作用。这是正确的做法。

答案 2 :(得分:0)

在故事板中设计单元格时,应用所有约束,即应用所有必需的约束:顶部,底部,左侧和右侧,以便可以根据内容自动计算单元格的高度。

self.tableView.rowHeight = UITableViewAutomaticDimension; 
self.tableView.estimatedRowHeight = 44.0;