从-tableView:cellForRowAtIndexPath计算“indexPath”的自定义UITableViewCell高度:?

时间:2013-04-05 21:00:35

标签: uitableview heightforrowatindexpath

我在自定义类中调整自定义UITableViewCell的高度,我相信我需要使用-tableView:cellForRowAtIndexPath:方法来调整单元格的高度。我试图调整自定义单元格类中自定义单元格的高度,然后在给定的索引路径上抓取单元格,并返回该单元格的高度,如下所示:

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
 {
     CustomUITableViewCell *cell = (CustomUITableViewCell *)[tableView cellForRowAtIndexPath:indexPath];

     return cell.frame.size.height;
 }

但我得到堆栈溢出。这样做的好方法是什么?

2 个答案:

答案 0 :(得分:2)

表格视图delegate将首先调用heightForRowAtIndexPath:,然后datasource将根据计算出的信息在cellForRowAtIndexPath:之后构建单元格。

因此,您的方法无效。

你需要有一些计算高度的逻辑。 (例如,如果要显示文本,高度可能是动态的,并且取决于文本的数量 - 您可以使用NSString方法计算出来。)

如果您只是显示几种具有固定高度的单元格,只需将这些高度定义为常量,并根据cellForRowAtIndexPath:中的相同逻辑返回正确的高度,以决定使用哪个单元格。

#define kBasicCellHeight 50
#define kAdvancedCellHeight 100

- (CGFloat)tableView:(UITableView *)tableView 
       heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (needToUseBasicCellAtThisIndexPath) {
       return kBasicCellHeight;
    }
    return kAdvancedCellHeight;         
}

答案 1 :(得分:0)

如果是故事板单元格,您可以致电dequeueReusableCellWithIdentifier:。否则,您可以直接使用[CustomUITableViewCell alloc] initWithFrame:]

等实例化单元格

我自己使用这种方法(使用原型单元格计算高度),因为它允许我们的设计师修改故事板单元而无需更改代码。

您可能需要根据所讨论的here高度是静态还是动态来调整您的方法。