2

我有一个 UITableView,我为它创建了两个不同的自定义单元格,我们称一个为“RegularCell”,另一个为“BigCell”。这样做的原因是我需要不同的数据模型对象表示,在某些情况下我希望以不同的方式呈现数据。

我读了一些关于通过 heightForRowAtIndexPath 与 cellForRowAtIndexPath 来处理它的方法,但我不清楚在我的情况下如何处理它>>在我的表中,我事先不知道哪一行将包含哪个自定义单元格; 我只在 cellForRowAtIndexPath 中获取这些数据,我在其中检查数据数组,在这种情况下我需要代表特定行。

在 heightForRowAtIndexPath 中进行计算似乎很愚蠢,因为它是在 cellForRowAtIndexPath 之前调用的,并且整个想法是您不会提前创建所有单元格,而只是为诸如滚动条大小之类的东西“腾出空间”。

另一方面,只有当我意识到我所代表的内容时,我才能知道我需要哪个单元格,因此行高应该是多少。

有人遇到过这样的案例,可以分享一些智慧吗?

4

4 回答 4

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;
}
于 2013-09-02T07:01:28.853 回答
1

heightForRowAtIndexPath 在 cellForRowAtIndexPath 之前被调用,因为 tableView 布局器需要知道滚动视图的大小以及在显示时应该在屏幕上看到哪些单元格,这可能取决于每个单元格的高度.

我以前遇到过这个问题,我的建议是在 tableView 运行之前计算模型中每个单元格的高度。

于 2013-09-01T13:34:20.227 回答
0

好的......我找到了一个简单的解决方案 - 因为我有一个数据对象数组,所以我可以检查每一行,相关数据对象相关属性 >> 在我的例子中,我有一个名为 isSuper >> 的 BOOL 值,在这个这样我就可以设置数据库中每个对象的行高,而无需在 heightForRowAtIndexPath 中创建或上传实际的 UITableViewCell。

于 2013-09-02T07:10:03.887 回答
0

我有类似的问题。这就是我最终的结果:

-(CGFloat)tableView:(UITableView *)tableView 
heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
return cell.frame.size.height;
}
于 2013-09-01T15:41:18.113 回答