这是tableView:heightForFooterInSection:
未实现时的外观:
将此行添加到代码中后:
func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 120
}
发生以下情况:
答案 0 :(得分:2)
您使用tableView.tableFooterView
设置的页脚与章节页脚不同。
每个部分都有一个页脚,其高度用tableView:heightForFooterInSection:
指定,tableView本身可以有一个页脚(在所有部分下面)。此页脚是使用tableView.tableFooterView
设置的,只需通过设置视图的框架即可更改其高度。
答案 1 :(得分:-1)
只需将以下代码添加到管理tableview的控制器的viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
//...
// Remove extra separators
tableView.tableFooterView = UIView(frame: CGRectZero)
}
答案 2 :(得分:-1)
对于类似的情况,我使用了 tableFooterView。
final class TableViewWithDynamicFooter: UITableView {
private var isAwaitnigReloading: Bool = false
private var lastCalculatedFooterSize: CGFloat?
private func setupHeaderHeight() {
guard let footer = self.tableFooterView else { return }
let originContentHeight = self.contentSize.height - (lastCalculatedFooterSize ?? 0)
let emptySpaceUnderContent = self.bounds.height - originContentHeight
let minFooterHeight = footer.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
assert(minFooterHeight != 0, "Footer height constraints don't let usage of systemLayoutSizeFitting")
footer.frame.size.height = max(emptySpaceUnderContent, minFooterHeight)
self.contentSize.height = footer.frame.origin.y + footer.frame.height
lastCalculatedFooterSize = footer.frame.size.height
isScrollEnabled = footer.frame.size.height == minFooterHeight
}
override func reloadData() {
isAwaitnigReloading = true
super.reloadData()
}
override func layoutSubviews() {
super.layoutSubviews()
guard isAwaitnigReloading == true else { return } // allow to calculate footer size once, after reload regardless of the number of layoutSubviews calls
setupHeaderHeight()
isAwaitnigReloading = false
}
}
我的实现演示在这里:https://github.com/ArturRuZ/TableViewWithDynamicFooter