UITableView 的 `tableHeaderView` 初始高度 400pt,點擊 Header 內按鈕後需展開至 800pt,並伴隨動畫效果。
直接修改 `headerView.frame.size.height` 無效,必須重新設置 `tableView.tableHeaderView` 觸發佈局刷新。
@objc func expandHeader() {
let header = tableView.tableHeaderView!
var frame = header.frame
frame.size.height = 800
header.frame = frame
// 關鍵:重新賦值觸發佈局
UIView.animate(withDuration: 0.3) {
self.tableView.tableHeaderView = header
self.tableView.layoutIfNeeded()
}
}
var isExpanded = false
@objc func toggleHeader() {
isExpanded.toggle()
let targetHeight = isExpanded ? 800 : 400
var frame = tableView.tableHeaderView!.frame
frame.size.height = targetHeight
tableView.tableHeaderView!.frame = frame
UIView.animate(withDuration: 0.3) {
self.tableView.tableHeaderView = self.tableView.tableHeaderView
self.tableView.layoutIfNeeded()
}
}
動態調整 `tableHeaderView` 高度的核心是修改 frame 後重新賦值給 tableView.tableHeaderView 並配合動畫,而非調用 `reloadData`。掌握此技巧可實現平滑的展開/折疊效果。