【发布时间】:2021-09-29 10:24:32
【问题描述】:
【问题讨论】:
标签: ios swift xcode uitableview
【问题讨论】:
标签: ios swift xcode uitableview
TableView 表头高度不会自动刷新,每次其内容发生变化时,您必须自己重新计算高度。高度重新计算和tableview标题刷新可以在'viewDidLayoutSubviews'方法中完成。
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
guard let headerView = tableView.tableHeaderView else {
return
}
let size = headerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize)
if headerView.frame.size.height != size.height {
headerView.frame.size.height = size.height
tableView.tableHeaderView = headerView
// This only seems to be necessary on iOS 9.
tableView.layoutIfNeeded()
}
}
答案和代码片段是“Variable Height Table View Header”帖子的简短摘要,可在 usyourloaf 访问
【讨论】:
您需要使用文本估计标签高度,并加上图像/按钮高度来计算标题视图的总高度
func estimatedLabelHeight(text: String, width: CGFloat, font: UIFont) -> CGFloat {
let size = CGSize(width: width, height: 1000)
let options = NSStringDrawingOptions.usesFontLeading.union(.usesLineFragmentOrigin)
let attributes = [NSAttributedStringKey.font: font]
let rectangleHeight = String(text).boundingRect(with: size, options: options, attributes: attributes, context: nil).height
return rectangleHeight
}
这里是估计标题高度的方法:
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return label size + other size
}
或者您可以使用自动布局来避免估计高度:
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return UITableView.automaticDimension
}
【讨论】: