是否有可能使用自动布局获得dynamic表视图节标题高度?
iOS 8新增function,您只需设置估计的行高即可获得100%的dynamic表格视图单元格,然后使用“自动布局”在单元格中布局元素。 如果内容的高度增加,细胞也会增加高度。 这是非常有用的,我想知道是否可以在表视图中的节标题完成相同的壮举?
例如,可以在tableView:viewForHeaderInSection:
创buildUIView
tableView:viewForHeaderInSection:
添加一个UILabel
子视图,为视图指定标签的自动布局约束,并使视图的高度适合标签的内容,而不必实现tableView:heightForHeaderInSection:
viewForHeaderInSection
的文档声明:“只有当tableView:heightForHeaderInSection:也被实现时,这个方法才能正常工作。 我还没有听说iOS 8有什么变化。
如果一个人不能这样做,模仿这种行为的最好方法是什么?
这个有可能。 这是iOS 8中实现的dynamic单元高度的新增function。
这很简单。 只要在viewDidLoad
join这个:
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() }