iOS >> UITableView 与 2 个不同的自定义 UITableViewCells 具有不同的高度
Posted
技术标签:
【中文标题】iOS >> UITableView 与 2 个不同的自定义 UITableViewCells 具有不同的高度【英文标题】:iOS >> UITableView with 2 Different Custom UITableViewCells that Have Different Height 【发布时间】:2013-09-01 13:28:28 【问题描述】:我有一个 UITableView,我为它创建了两个不同的自定义单元格,我们称一个为“RegularCell”,另一个为“BigCell”。这样做的原因是我需要不同的数据模型对象表示,在某些情况下我希望以不同的方式呈现数据。
我阅读了一些关于通过 heightForRowAtIndexPath 与 cellForRowAtIndexPath 来处理它的方法,但我不清楚在我的情况下如何处理它 >> 在我的表格中,我事先不知道哪一行将包括哪个自定义单元格;我只在 cellForRowAtIndexPath 中获取这些数据,我在其中检查数据数组,在这种情况下我需要代表特定行。
在 heightForRowAtIndexPath 中进行计算似乎很愚蠢,因为它是在 cellForRowAtIndexPath 之前调用的,并且整个想法是您不会提前创建所有单元格,而只是为诸如滚动条大小之类的东西“腾出空间”。
另一方面,只有当我意识到我所代表的内容时,我才能知道我需要哪个单元格,因此行高应该是多少。
有谁遇到过这样的案例,可以分享一些智慧吗?
【问题讨论】:
【参考方案1】:大卫是对的!
我不同意你说的
在我的表中,我事先不知道哪一行将包含哪一行 自定义单元格;我只在 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;
【讨论】:
【参考方案2】:heightForRowAtIndexPath 在 cellForRowAtIndexPath 之前调用,因为 tableView 布局器需要知道滚动视图的大小以及在显示时应该在屏幕上看到哪些单元格,这可能会因高度而异每个单元格。
我以前遇到过这个问题,我的建议是在 tableView 运行之前计算模型中每个单元格的高度。
【讨论】:
【参考方案3】:我也遇到过类似的问题。这就是我最终的结果:
-(CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
return cell.frame.size.height;
【讨论】:
【参考方案4】:好的... 我找到了一个简单的解决方案 - 由于我有一个数据对象数组,我可以检查每一行,相关数据对象相关属性>>在我的情况下,我有一个名为 isSuper >> 的 BOOL 值,这样我可以设置数据库中每个对象的行高,无需在 heightForRowAtIndexPath 中创建或上传实际的 UITableViewCell。
【讨论】:
以上是关于iOS >> UITableView 与 2 个不同的自定义 UITableViewCells 具有不同的高度的主要内容,如果未能解决你的问题,请参考以下文章
UITableView 和分段控制器在 IOS 11 导航栏下移动
UITableView swift IOS分组部分中的重复值
iOS - UITableView - numRowsInSection 与 cellForRowAtIndexPath 不同