我有一个自定义 tableview + 自定义单元格,它们是使用基于约束的自动布局构建的(全部以编程方式,无 IB)。在每个单元格中(除其他外)有一个(可能)带有文本的多行标签。自动布局的第一次计算很好 - 即 UILabel 根据其文本长度正确换行。
但是一旦我选择一个单元格(即从 UITableViewCellAccessoryNone 更改为 UITableViewCellAccessoryCheckmark)并且 UILabel.text 所需的行数应该更改 - 但保持不变。
我试过了...
[myTableView reloadData];
和
[myTableView beginUpdate];
[myTableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
[myTableView endUpdates];
...在单元格选择委托(delegate)中,但没有成功更新单元格布局。
我想我需要告诉系统重新评估 tableviewcell 的约束(特别是重新评估 UILabel 的 preferredMaxLayoutWidth。)但我不知道如何以正确的方式做到这一点。 (我用 setNeedsUpdate 尝试了一些东西,而不是试错式。)
预先感谢您为我指明了正确的方向!
最佳答案
您必须通过以下方式专门重新评估 UILabel 的 preferredMaxLayoutWidth:-
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
[self updatePreferredMaxLayoutWidth:self.lblText]; // you have to store a UIlabel temporarily on didselectaction of UITableView
[self.view layoutSubviews];
}
关于iOS:当其accessoryView更改时,如何触发tableViewCell的约束/自动布局的刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29969135/