滚动表格视图时,我需要在表格视图顶部传递的行

Posted

技术标签:

【中文标题】滚动表格视图时,我需要在表格视图顶部传递的行【英文标题】: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)

感谢您的帮助!

【问题讨论】:

【参考方案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

【讨论】:

以上是关于滚动表格视图时,我需要在表格视图顶部传递的行的主要内容,如果未能解决你的问题,请参考以下文章

如何在滚动表格视图期间始终将表格视图的第一个单元格保持在其表格视图的顶部

表格视图在它上面的视图下滚动而不是它

将一个视图滑过另一个视图

使 UIButton 保持在表格视图 rss 提要单元格的顶部 [重复]

就像在 facebook 应用程序中一样高效流畅地滚动顶部视图

弹出窗口中的表格视图不滚动