当基类实现 tableView:heightForRowAtIndexPath: 时如何使用 UITableViewAutomaticDimension:

Posted

技术标签:

【中文标题】当基类实现 tableView:heightForRowAtIndexPath: 时如何使用 UITableViewAutomaticDimension:【英文标题】:How can I use UITableViewAutomaticDimension when the baseclass implements tableView:heightForRowAtIndexPath: 【发布时间】:2016-10-19 11:37:26 【问题描述】:

我有大约 30 个视图控制器,它们都有一个实现“heighForRowAtIndexPath”的通用基类。现在我们最近删除了 ios 7 支持,这让我们可以使用 AutoLayout 进行漂亮的自动高度计算。刚刚向我展示了一个相当复杂的单元格,它非常适合这个自动高度。

文档说明了这一点:

如果委托未实现,您可以设置单元格的行高 tableView:heightForRowAtIndexPath: 方法。默认值为 rowHeight 是 UITableViewAutomaticDimension。

看来,由于我的基类实现了 heightFor.. 自动没有生效。

有没有办法解决这个问题?我会以某种方式需要“取消实现”该特定方法。

【问题讨论】:

您可能需要覆盖视图控制器类中的heightForRowAtIndexPath 方法和那里的return UITableViewAutomaticDimension; 如果你重新覆盖它并返回值UITableViewAutomaticDimension会发生什么? 秒杀我! XD @Mrunal 谢谢,工作。 @NicolasMiari 也谢谢 【参考方案1】:

您可以在子类中从heightForRowAtIndexPath 返回UITableViewAutomaticDimension

-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
    return UITableViewAutomaticDimension;

【讨论】:

完美!非常感谢。我似乎在任何地方都找不到它。 @JonathanWinger-Lang:Apple 文档中有 AutoLayout Guide:developer.apple.com/library/content/documentation/… @Mrunal 是吗?我在这里只能读到我们必须将表视图(而不是单元格)rowSize 设置为自动维度。从委托方法返回它没有任何意义。 rowSize 可能与方法有关,但并不明显。它甚至说“通常我们使用委托方法”,这意味着我们现在不应该使用它,而是将 rowSize 设置为表视图。无论如何,这对我来说似乎并不明显。

以上是关于当基类实现 tableView:heightForRowAtIndexPath: 时如何使用 UITableViewAutomaticDimension:的主要内容,如果未能解决你的问题,请参考以下文章

当基类不包含数据成员时,是不是仍然需要虚拟继承?

继承,虚继承机制

C++的虚函数表

C++的虚函数表

virtual

Virtual的用法