【问题标题】:When scrolling a tableview I need the row that's passing at the very top of the tableview滚动表格视图时,我需要在表格视图顶部传递的行
【发布时间】:2018-09-28 01:40:56
【问题描述】:

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

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

感谢您的帮助!

【问题讨论】:

    标签: swift uitableview


    【解决方案1】:

    这可能只有一个原因会为零,因为您的观点不受 tablview 范围的限制。

    苹果文档:

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

    试试这个。

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

    参考:Diff between bounds and frame

    【讨论】:

      【解决方案2】:

      您需要先将 (0,0) 转换为 table view 的边界坐标,如下所示:

      // 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

      【讨论】:

        猜你喜欢
        • 2013-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-22
        • 1970-01-01
        • 1970-01-01
        • 2013-05-14
        • 2013-01-03
        相关资源
        最近更新 更多