我有一个tableHeaderView,它应该根据其内容具有动态高度。
我尝试使用systemLayoutSizeFitting&sizeToFit方法来设置表格视图的新高度,不幸的是,这似乎工作得很好,但是却不是我想要的(动态UI之一被裁剪了)。我尝试将要动态设置的UI的内容压缩抗性优先级设置为(1000),但是它的效果不佳..每次至少裁剪一个UI时。
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var podView: PodView!
@IBOutlet weak var postCaption: UILabel!
var pod: Pod!
override func viewDidLoad() {
super.viewDidLoad()
//set header view
podView.setPod(image: pod.image, title: pod.title, description: pod.description, viewWidth: UIScreen.main.bounds.width)
podView.sizeToFit()
postCaption.text = pod.description
postCaption.sizeToFit()
let height = tableView.tableHeaderView!.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
tableView.tableHeaderView!.frame.size.height = height
}
编辑:约束:
答案 0 :(得分:0)
尝试执行以下步骤以创建动态tableview标头单元格:-
1-从情节提要的表视图中添加一个UItableViewCell
2-根据您的要求创建tableView header
UI。
3-根据需要,将类创建为TableViewHeaderCell
,您想要在标题单元格中显示什么。
4-然后在ViewController类中实现headerview delegate method
。
/**
Tableview header method
*/
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
}
5-在这种方法中,您要创建TableViewHeaderCell
对象并像这样返回cell content View
。
/**
Table Header view cell implement and return cell content view when you create cell object with you identifier and cell name after that you have to mention height for header cell
*/
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell Identifier") as! CellName
return cell.contentView
}
6-实施Tableview header height method
/**
Here you can specify the height for tableview header which is actually your `TableViewHeader Cell height`
*/
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
//For eg
return 100
}
通过此步骤,您还可以实现动态页眉视图单元格和页脚视图单元格,但是对于页脚视图单元格,请实现Tableview页脚视图委托方法。
>谢谢
答案 1 :(得分:0)
具有TableHeaderView
的动态高度。将以下代码添加到您的viewController中。它将像魅力一样工作。
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
if let headerView = tableView.tableHeaderView {
let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height
var headerFrame = headerView.frame
//Comparison necessary to avoid infinite loop
if height != headerFrame.size.height {
headerFrame.size.height = height
headerView.frame = headerFrame
tableView.tableHeaderView = headerView
}
}
}
注意:请确保tableHeaderView具有适当的AutoLayout
约束以获取适当的高度。