我有一个带有随机数量的自定义单元格的UITableView。一切正常。
我使用以下命令将选定的单元格移到UITableView的顶部:
tableView.scrollTo(index path animated)
但是,当选定的单元格位于单元格的最后完整“页面”上时,这将不起作用-显然。
我是否可以通过根据选定单元格的Y位置以某种方式用空白空间“填充”表格来完成此工作,因此即使选择最后一行,它也将进行动画处理并移至表格视图的顶部?
我认为:
let point = CGPoint(x: 0, y: 200)
tableView.setContentOffset(point, animated: false)
可以工作,但是(200)不是测试量。
我确定这是有可能的,请给我一个指针吗?
答案 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)
}