滚动表格视图时,我需要在表格视图的最上方传递的行

时间:2018-09-28 01:40:56

标签: swift uitableview

我有一个表视图,我需要在表视图的最顶部(0,0)传递的行的索引路径,我尝试使用indexPathForRow(at :),它期望一个cgpoint,我尝试CGPoint.zero来获取行,但是indexPath始终为nil,我读到我需要使用scrollView的偏移量,并且该点必须在局部坐标中,但到目前为止没有运气

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let cgPoint = CGPoint.zero
    let indexPath = tableView.indexPathForRow(at: cgPoint)
}

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

由于您的观点不在tablview范围内,所以这将是零的原因可能只有一个。

Apple文档:

  

表示与点关联的行和部分的索引路径;如果该点超出任何行的边界,则为nil。   点在表格视图的局部坐标系中(表格视图的边界)。

尝试一下。

let cgPoint = CGPoint.zero

if self.tableView.frame.contains(cgPoint) {
     print("point exist so indexpath should exist")
}

参考:Diff between bounds and frame

答案 1 :(得分:0)

您需要先将(0,0)转换为表格视图的边界坐标,如下所示:

// Take (0,0) from parent view, find where it locates in table view's bounds
let p = tableView.superview!.convert(.zero, to: tableView)
guard let ind = tableView.indexPathForRow(at: p) else { return }
let cell = tableView.cellForRow(at: ind)! // Do what you want

Demo gif