ios – 具有动态高度的UITableViewCell中的UILabel

我在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.

我很感激这个帮助.

解决方法

我最终通过在cellForRowAtIndexPath中分配/初始化标签来解决这个问题.我不完全确定为什么这是一个解决方案 – 但是我遇到的问题似乎与故事板(或者何时?)在单元格中创建对象有关.如果我在cellForRowAtIndexPath中的单元格中分配/初始化标签,则所有内容都会正确加载和调整大小.

所以…我当前的解决方法是检查单元格中是否有自定义标签.如果没有,我分配/初始化标签并将其放入单元格中.如果它确实有一个,就像它已经出列的单元格一样,那么我只需在已存在的标签中设置文本.

不确定它是否是最佳解决方案,但它现在仍在使用.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...