计算自定义UITableViewCell高度为;indexath";from-tableView:cellForRowAtIndexPath:?

计算自定义UITableViewCell高度为;indexath";from-tableView:cellForRowAtIndexPath:?,uitableview,heightforrowatindexpath,Uitableview,Heightforrowatindexpath,我在自定义类中调整自定义UITableViewCell的高度,我认为需要使用-tableView:cellforrowatinexpath:方法来调整单元格的高度。我试图在自定义单元格类中调整自定义单元格的高度,然后在给定的索引路径处获取单元格并将其强制转换,然后返回该单元格的高度,如下所示: - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; {

我在自定义类中调整自定义
UITableViewCell
的高度,我认为需要使用
-tableView:cellforrowatinexpath:
方法来调整单元格的高度。我试图在自定义单元格类中调整自定义单元格的高度,然后在给定的索引路径处获取单元格并将其强制转换,然后返回该单元格的高度,如下所示:

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

     return cell.frame.size.height;
 }

但是我的堆栈溢出了。做这件事的更好方法是什么?

如果是情节提要单元,您可以调用
dequeueReusableCellWithIdentifier:
。否则,您可以直接使用类似于
[CustomUITableViewCell alloc]initWithFrame:
的内容实例化单元格

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


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

表视图
委托将首先调用
heightforrowatinexpath:
,然后
数据源将根据计算出的信息在
cellforrowatinexpath:
中构造单元格

因此,您的方法将不起作用

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

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

#define kBasicCellHeight 50
#define kAdvancedCellHeight 100

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

我想说@Mundi的建议更好/更简单,除非(a)您希望在不更改代码的情况下修改故事板中的单元高度,或者(b)您的单元需要计算其高度/布局,并且您不希望在视图控制器中复制该逻辑。