实现tableView时,UITableView的页脚不会与表一起滚动:heightForFooterInSection:

时间:2015-09-15 09:13:51

标签: ios swift uitableview

这是tableView:heightForFooterInSection:未实现时的外观:

enter image description here

将此行添加到代码中后:

func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return 120
}

发生以下情况:

  1. 当我开始滚动到底部
  2. enter image description here

    1. 当我完成滚动到底部
    2. enter image description here

      为什么屏幕底部有固定的灰色空间?它应该不是那样的。有什么问题?

3 个答案:

答案 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