是否可以使用“自动布局”获得动态表格视图节标题高度?

问题描述 投票:102回答:8

iOS 8中的新增功能,您只需设置估计的行高,然后使用“自动布局”在单元格中布局元素,就可以获得100%的动态表格视图单元格。如果内容的高度增加,则单元格的高度也会增加。这非常有用,并且想知道表视图中的节标题是否可以实现相同的功能?

例如,可以在UIView中创建一个tableView:viewForHeaderInSection:,添加一个UILabel子视图,根据视图为标签指定自动布局约束,并使视图的高度增加以适合标签的内容,而无需必须实施tableView:heightForHeaderInSection:

viewForHeaderInSection的文档指出:“仅当还实现了tableView:heightForHeaderInSection:时,此方法才能正确工作。”我还没有听说iOS 8是否有任何更改。

如果无法做到这一点,模仿这种行为的最佳方法是什么?

ios uitableview ios8 autolayout
8个回答
255
投票

这是可能的。它是iOS 8中实现的动态单元格高度的新增功能。

非常简单。只需将其添加到viewDidLoad

self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension;
self.tableView.estimatedSectionHeaderHeight = 25;

然后覆盖viewForHeaderInSection,并使用“自动布局”将视图中的元素限制为合适。而已!无需实现heightForHeaderInSection。实际上,sectionHeaderHeight也不需要说明,我只是为了清楚起见添加了它。

请注意,在iOS 11中,默认情况下,单元格和页眉/页脚视图使用估计的高度。唯一要做的是提供估计的高度,以更好地告知系统预期的结果。默认值为UITableViewAutomaticDimension,但如果可能的话,您应该提供更好的估计值,即它们的平均高度。


25
投票

这可以通过在表格视图上设置(或返回)estimatedSectionHeaderHeight来完成。

如果在设置estimatedSectionHeaderHeight后您的节标题与单元格重叠,请确保您也在使用estimatedRowHeight

(我添加此答案,因为第二段包含了一个问题的答案,在阅读了一些可能遗漏的所有评论之后可以找到。)


8
投票

在同一问题中,标头的高度一直为零,直到我为heighForHeaderInSection的委托中提供固定的高度。


6
投票

我尝试过


6
投票

Swift 4 +


1
投票

就我而言:


0
投票

是的,它对我有用。我必须进行如下更改:


-1
投票

我修改了iuriimoz answer。刚替换为viewWillAppear方法:

© www.soinside.com 2019 - 2024. All rights reserved.