我有一个UITableView,我创建了两个不同的自定义单元格,让我们调用一个“RegularCell”和另一个“BigCell”。这样做的原因是我需要对数据模型对象使用不同的表示,在某些情况下我希望以不同的方式呈现数据。
我读了一些关于通过heightForRowAtIndexPath和cellForRowAtIndexPath来处理它的方法,但我不清楚如何在我的情况下接近它>>在我的表中,我事先不知道哪一行将包括哪个自定义单元格;我只在cellForRowAtIndexPath中获取这些数据,在那里我检查数据数组我需要为特定行代表哪种情况。
在heightForRowAtIndexPath中进行计算似乎很愚蠢,因为它是在cellForRowAtIndexPath之前调用的,并且整个想法是你没有提前创建所有单元格而只是为滚动条大小之类的东西“腾出空间”。
另一方面,只有当我意识到我所代表的内容时,我才能知道我需要哪个单元格,因此行高应该是什么。
任何人都遇到过这样的案例,可以分享一些智慧吗?
答案 0 :(得分:2)
大卫是对的!
我不同意你的说法
在我的表格中,我事先并不知道哪一行会包含哪一行 定制细胞;我只在cellForRowAtIndexPath中获取此数据 检查数据数组我需要为特定情况表示哪种情况 行。
在heightForRowAtIndexPath中,您可以像在cellForRowAtIndexPath中一样访问数据源:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGFloat bigCellHeight = 80.0;
CGFloar regularCellHeight = 44.0;
MyDataObject *object = [myArray objectAtIndex: indexPath.row];
if ([object anyConditionToChoseBigCell]) {
return bigCellHeight;
}
return regularCellHeight;
}
答案 1 :(得分:1)
在cellForRowAtIndexPath之前调用heightForRowAtIndexPath,因为tableView layouter需要知道滚动视图的大小以及在显示时屏幕上应该显示哪些单元格,这可能会因高度而异每个细胞。
之前我遇到过这个问题,我建议你在tableView运行之前计算模型中每个单元格的高度。
答案 2 :(得分:0)
我遇到过类似的问题。这就是我最终的结果:
-(CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
return cell.frame.size.height;
}
答案 3 :(得分:0)
OK ... 我发现了一个简单的解决方案 - 由于我有一个数据对象数组,我可以检查每一行,相关的数据对象相关属性>>在我的情况下,我有一个名为isSuper>>的BOOL值。通过这种方式,我可以设置DB中每个对象的行高,而无需在heightForRowAtIndexPath中创建或上传实际的UITableViewCell。