1

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

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

     return cell.frame.size.height;
 }

但我得到堆栈溢出。有什么更好的方法来解决这个问题?

4

2 回答 2

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;         
}
于 2013-04-06T07:56:45.300 回答
0

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

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

您可能希望根据此处讨论的高度是静态的还是动态的来调整您的方法。

于 2013-04-06T03:05:16.467 回答