【问题标题】:Calculate cell height based on number of lines?根据行数计算单元格高度?
【发布时间】:2011-04-21 01:05:34
【问题描述】:

我想使用(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 自定义 UITableViewCell 高度。

我试图通过将textLabel 中的行数乘以每行的高度,然后为字幕添加10.0f 来获得UITableViewCell 的高度。我正在使用以下代码并获得exc_bad_access()。为什么?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return ([[[tableView cellForRowAtIndexPath:indexPath] textLabel] numberOfLines] * [[[[tableView cellForRowAtIndexPath:indexPath] textLabel] font] lineHeight]) + 10.0;
    //return kRowHeightiPod; //A constant value for a sanity check
}

【问题讨论】:

  • 看看这个问题。如果你看答案的第二部分,相信你会找到解决方案stackoverflow.com/questions/129502/…
  • @Aaron - 我相信它应该更简单。我不应该为我的单元重新定义一个矩形。我应该能够根据行数简单地计算高度。我正在尝试为我的行高和行值数获取浮点值。
  • 我认为最终,该解决方案将被证明是最简单的,您还没有单元格矩形。

标签: iphone objective-c uitableview uilabel row-height


【解决方案1】:

您是否在标签上设置了行数?因为这会给你一个默认的答案,而不是与你正在使用的文本匹配的行数......

我认为最可能导致崩溃的原因与 textLabel 有关。尝试在可执行文件的环境变量中将 NSZombieEnabled 设置为 YES,日志会告诉你释放后调用的是什么类型的对象...

【讨论】:

    【解决方案2】:

    在获取单元格之前,您需要计算它的高度。您刚刚计算出它的高度取决于获取单元格。你已经创建了一个无限递归。

    您将需要找到另一种方法来进行计算,可能是通过检查要添加到表格单元格中的数据,而不是直接查询表格单元格。

    另外,请注意numberOfLines 表示文本标签能够显示的行数,但如果没有足够的内容,它可能会显示较少。换句话说,即使它只显示一行文本,如果这是文本标签能够显示的最大行数,numberOfLines 也会返回两行。

    您可能想要的是使用NSString UIKit additions 之一来计算要在单元格中显示的文本的高度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-29
      • 1970-01-01
      • 2019-03-22
      • 2023-02-05
      • 2011-09-09
      相关资源
      最近更新 更多