是否有可能使用自动布局获得dynamic表视图节标题高度?

iOS 8新增function,您只需设置估计的行高即可获得100%的dynamic表格视图单元格,然后使用“自动布局”在单元格中布局元素。 如果内容的高度增加,细胞也会增加高度。 这是非常有用的,我想知道是否可以在表视图中的节标题完成相同的壮举?

例如,可以在tableView:viewForHeaderInSection:创buildUIView tableView:viewForHeaderInSection:添加一个UILabel子视图,为视图指定标签的自动布局约束,并使视图的高度适合标签的内容,而不必实现tableView:heightForHeaderInSection:

viewForHeaderInSection的文档声明:“只有当tableView:heightForHeaderInSection:也被实现时,这个方法才能正常工作。 我还没有听说iOS 8有什么变化。

如果一个人不能这样做,模仿这种行为的最好方法是什么?

这个有可能。 这是iOS 8中实现的dynamic单元高度的新增function。

这很简单。 只要在viewDidLoadjoin这个:

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

然后覆盖viewForHeaderInSection并使用自动布局来约束视图中的元素。 完成。 无需实现heightForHeaderInSection 。 实际上, sectionHeaderHeight也不需要说明,我只是为了清楚起见而添加了它。

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

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

在设置estimatedSectionHeaderHeight如果您的部分标题与您的单元格重叠,请确保您使用的是estimatedRowHeight

(我正在添加这个答案,因为第二段包含了一个问题的答案,可以在阅读所有可能错过的评论后find)。

我试过了

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

但它没有用多行标签正确标题。 增加了这个来解决我的问题:

 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // Recalculates height tableView.beginUpdates() tableView.endUpdates() }