我在 UITableView 中实现动态行高时遇到了一些问题 - 但我遇到问题的不是单元格,而是单元格内的 UILabel。
单元格只包含一个 UILabel 来显示文本。我的 tableView:heightForRowAtIndexPath: 通过使用 NSString 的 sizeWithFont: 方法计算将在其中的标签的高度来正确调整每个单元格的大小。
我有一个 UITableViewCell 的子类,它只包含连接在情节提要中的 UILabel 属性。在情节提要中,我已将其行数设置为 0,因此它将根据需要使用尽可能多的行数,并且我已将其 lineBreak 设置为 Word Wrap。
这是我设置单元格的方式:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
ExpandCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
SomeObject *object = self.tableObjects[index.row];
cell.myLabel.text = [object cellText];
[cell.myLabel sizeToFit];
return cell;
}
当我构建这个时,我得到了我的表格视图,其中单元格的所有大小都适合其内容的正确高度,但标签都是 1 行,只是从单元格的一侧延伸出来。但是,如果我滚动表格,使单元格离开屏幕,然后滚动回它们,它们的标签将被正确调整大小,并且单元格将看起来像我最初的预期。
我还尝试使用与计算行高相同的方法来计算标签框架,并且得到了相同的行为 - 它无法正确绘制,直到它从屏幕上滚动并重新打开。
我找到了两种解决此问题的方法,但都不是可接受的解决方案。
首先,如果在 viewDidAppear: 我在我的 tableview 上调用 reloadData,单元格和标签第一次正确地绘制自己。这不适用于我的情况,因为我将在此表中添加和删除单元格,并且我不想在每次添加单元格时调用 reloadData。
第二种解决方法对我来说似乎很奇怪 - 如果我将字体设置保留为 UILabel 上的默认系统字体 17,则单元格会正确绘制自己。一旦我更改了字体大小,它就会恢复到它没有正确绘制标签的行为,直到它离开屏幕并返回,或者在 tableView 上调用 reloadData。
我将不胜感激任何帮助。