使UITableView的最后一行显示在顶部

时间:2018-06-29 18:43:11

标签: ios swift uitableview scroll

我有一个带有随机数量的自定义单元格的UITableView。一切正常。

我使用以下命令将选定的单元格移到UITableView的顶部:

tableView.scrollTo(index path animated)

但是,当选定的单元格位于单元格的最后完整“页面”上时,这将不起作用-显然。

我是否可以通过根据选定单元格的Y位置以某种方式用空白空间“填充”表格来完成此工作,因此即使选择最后一行,它也将进行动画处理并移至表格视图的顶部?

我认为:

let point = CGPoint(x: 0, y: 200)
tableView.setContentOffset(point, animated: false)

可以工作,但是(200)不是测试量。

我确定这是有可能的,请给我一个指针吗?

2 个答案:

答案 0 :(得分:1)

如果要允许表格视图滚动到足够长的距离,以使最后一行到达屏幕顶部,请将该视图设置为表格视图的tableFooterView

将其设置为空的UIView,其高度等于表格视图的可见高度减去一行的高度。

答案 1 :(得分:0)

rMaddy给出了正确的答案。非常感谢!我从未想过要使用页脚!

对于可能对此感兴趣的是工作代码:

注意,这只是一个原型,所以我要对细胞的数量和一次可以在屏幕上看到的数量进行硬编码。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
    let maxNumberOfRows        = 24
    let maxNumberOfVisibleRows = 10
    let safeArea: CGFloat      = 20

    let cell = tableView.cellForRow(at: indexPath)

    if indexPath.row >= maxNumberOfRows - maxNumberOfVisibleRows
    {
        let numberOfSpacesRequired = ( maxNumberOfRows - indexPath.row ) * Int((cell?.bounds.height)!)

        let spaceView = UIView()

        spaceView.bounds = CGRect(x: 0, y: 0, width: Int(tableView.bounds.width), height: ( Int(tableView.bounds.height - safeArea) - numberOfSpacesRequired) )

        tableView.tableFooterView = spaceView
    }

    tableView.scrollToRow(at: indexPath, at: UITableViewScrollPosition.top, animated: true)
}