如何创建动态 tableView 单元格?
Posted
技术标签:
【中文标题】如何创建动态 tableView 单元格?【英文标题】:How can I create a dynamically tableView cell? 【发布时间】:2014-04-06 06:09:24 【问题描述】:我有最多三个标签和两个图像的 tablewView 单元格。这些标签和图像并不总是存在。如何根据现有标签和图像设置单元格高度?
这不起作用:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
CGFloat h = kRowHeight;
FeedCell *cell = (FeedCell *)[tableView cellForRowAtIndexPath:indexPath];
if (!cell.cellTextLabel)
h = 100.0;
return h;**
【问题讨论】:
您是否收到类似“Thread1: EXC_BAD_ACCESS”的错误?当我在上面尝试你的代码时,它进入了一个循环,最终给了我这个错误。 【参考方案1】:当我使用您提供的代码进行测试时,它进入了一个循环。它将 kRowHeight 设置为 h,然后尝试调用 cellForRowAtIndexPath
,然后重复。显然,cellForRowAtIndexPath
在 BEFORE cellForRowAtIndexPath
之前运行。在此问题的***答案Iphone - when to calculate heightForRowAtIndexPath
for a tableView
when each cell height is dynamic?
确定正确高度的一种方法是在其他地方查看更改尺寸的原因。在那个共享的答案中,他们提到如果您在框中有不同的字体,请检查 sizeWithFont。
在您的情况下,您可以提取cellForRowAtIndexPath
中确定标签是否存在的部分,然后在您的cellForRowAtIndexPath
和heightForRowAtIndexPath
中调用它。您将其提取出来,这样您就不会重复代码,您只需在两个不同的地方调用它。
您可能还需要运行[self.tableView reloadData]
。您甚至可能需要致电[self.view setNeedsLayout]
(但我认为如果您稍后更新它,在 viewWillAppear 中可能不需要)。
【讨论】:
【参考方案2】:如何去除单元格上的标签?我问是因为 heigthForRow... 被每个单元格调用,所以 if (!cell.label) 语句永远不会是真的,对吗?
我会添加另一个没有该标签的自定义单元格并设置 heigthAtRow... 根据每个单元格类别:
if([cell isKindOfClass [OneLabelCell class]])
我希望这有点道理。
【讨论】:
【参考方案3】:从docs,您需要实现以下方法:
tableView:heightForRowAtIndexPath:
【讨论】:
以上是关于如何创建动态 tableView 单元格?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 中创建具有动态 tableview 高度的动态 tableview 单元格
原型单元格中带有 CollectionView 的动态 TableView
UITableView:如何知道 TableView 的所有具有动态单元格高度的单元格何时被调整大小?
如何在使用tableViews自定义单元格时在运行时更改表视图单元格高度?