从-tableView:cellForRowAtIndexPath:“indexPath”计算自定义UITableViewCell高度?
问题描述:
我调整了自定义类中自定义UITableViewCell
的高度,我相信我需要使用-tableView:cellForRowAtIndexPath:
方法来调整单元格的高度。我试图刚刚调整的自定义单元格类的自定义单元格的高度,然后抓住电池在给定的索引路径投它,并返回该小区的这样的高度:从-tableView:cellForRowAtIndexPath:“indexPath”计算自定义UITableViewCell高度?
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
CustomUITableViewCell *cell = (CustomUITableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
return cell.frame.size.height;
}
但我获得堆栈溢出。这样做有什么更好的方法?
答
如果是故事板单元格,则可以拨打dequeueReusableCellWithIdentifier:
。否则,您可以直接使用[CustomUITableViewCell alloc] initWithFrame:]
之类的东西来实例化单元。
我自己使用这种方法(使用原型单元计算高度),因为它允许我们的设计人员在不需要更改代码的情况下修改故事板单元。
您可能需要根据高度是静态还是动态来调整您的方法,如here所述。
答
表格视图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;
}
我要说@芒迪的建议是更好/更简单,除非(一)要修改单元格高度情节板中不更改代码或(b)你的需要计算其高度/布局,你不不想在视图控制器中复制该逻辑。 – 2013-04-06 22:15:16