如何创建动态 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,然后重复。显然,cellForRowAtIndexPathBEFORE cellForRowAtIndexPath 之前运行。在此问题的***答案Iphone - when to calculate heightForRowAtIndexPath for a tableView when each cell height is dynamic?

中进行了讨论

确定正确高度的一种方法是在其他地方查看更改尺寸的原因。在那个共享的答案中,他们提到如果您在框中有不同的字体,请检查 sizeWithFont。

在您的情况下,您可以提取cellForRowAtIndexPath 中确定标签是否存在的部分,然后在您的cellForRowAtIndexPathheightForRowAtIndexPath 中调用它。您将其提取出来,这样您就不会重复代码,您只需在两个不同的地方调用它。

您可能还需要运行[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自定义单元格时在运行时更改表视图单元格高度?

如何在 swift 中在动态 TableView 中创建动态 tableView?

如何在swift中的动态表视图中创建动态表视图?