我在UITableView中实现了动态行高的一些问题 – 但它不是我遇到问题的单元格,它是单元格内部的UILabel.
单元格只包含一个UILabel来显示文本.我的tableView:heightForRowAtIndexPath:通过使用NSString的sizeWithFont:方法计算将在其中的标签的高度来正确调整每个单元格的大小.
我有一个UITableViewCell的子类,它只保存连接在storyboard中的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.
我很感激这个帮助.