我以编程方式生成的自定义UITableViewCell
包含几个UILabel
可以包装文本的内容:
newLabel.numberOfLines = 0;
newLabel.lineBreakMode = NSLineBreakByWordWrapping;
我在 a 中使用这些单元格,并UITableView
带有以下参数:
self.tableView.estimatedRowHeight = 120.0;
self.tableView.rowHeight = UITableViewAutomaticDimension;
因此,我希望单元格的高度会自动调整,并UILabel
在需要时显示多行。
因为这对新创建的单元格不起作用,所以我强制UITableView
执行更新viewDidAppear
:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if (self.appearsFirstTime) {
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView beginUpdates];
[self.tableView endUpdates];
self.appearsFirstTime = NO;
});
}
}
这适用于在第一次出现时生成的单元格,UITableView
因此在更新时已经存在。但是,它不适用于稍后通过滚动生成的单元格。这些后来初始化的单元格没有机会从更新中受益,因此高度不正确。
我找到了一种不同的方法来解决这个问题:https ://stackoverflow.com/a/25967370/4943710 但是这种方法的缺点是布局过程可能需要多次通过。然后,该方法正在处理导致不正确高度的临时结果。结果又是缺少文本行。此外,似乎单元格在以后的更新中失去了适应能力(例如,当改变界面方向时)。
现在我的问题是:
如何确保稍后生成的单元格(更新后UITableView
)始终以正确的高度显示?