我遇到了自动/动态 UITableView 部分标题 View 的问题,其中包含一个 UILabel 包装 (numberOfLines = 0)。高度计算不正确,尤其是当您滚动表格并且重新使用 View 时。有时 UILabel 会换行,有时会被截断,有时一个或多个标签不可见,有时标签之间会有额外的间距。自定义 View 包含一个带有三个 UILabel 的垂直 UIStackView,其中一个换行。
可以在 https://github.com/outerstorm/tableviewHeaderTest 找到演示该问题的完整示例应用程序.
部分标题高度在 viewDidLoad 中设置为自动,具有以下内容:
tableView.sectionHeaderHeight = UITableViewAutomaticDimension
tableView.estimatedSectionHeaderHeight = 30.0
并且还实现了以下 heightForHeaderInSection 只是为了让它工作:
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return UITableViewAutomaticDimension
}
我也试过在不同的点调用 setNeedsLayout() 和 layoutIfNeeded() 但无济于事。任何建议将不胜感激。
下面是在应用程序中看到的行为的屏幕截图。第一段被截断,第二段太高:
最佳答案
我最近遇到了这样的问题。
我通过设置多行标签的 preferredMaxLayoutWidth
解决了这个问题,即
在设置标签值之前,将它们的 preferredMaxLayoutWidth
设置为:
self.label1.preferredMaxLayoutWidth = self.label1.frame.size.width
self.label2.preferredMaxLayoutWidth = self.label2.frame.size.width
self.label3.preferredMaxLayoutWidth = self.label3.frame.size.width
关于ios - UITableView 部分标题自动高度未正确更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44005890/