如何在 UITableView 中找到屏幕中心的哪一行/单元格?

Muj*_*ari 7 uitableview ios

我有 UITableview ,tableview 中有很多行/单元格。

当 UITableview 滚动时,找到屏幕中心的哪一行/单元格。

小智 6

有几个选项可以获取中央行。一种是在中心获取 indexPath :

NSIndexPath *indexPathAtCenter = [self.tableView indexPathForRowAtPoint:CGPointMake(self.tableView.bounds.size.width/2, self.tableView.bounds.size.height/2)];
UITableViewCell *centerCell = [self.tableView cellForRowAtIndexPath:indexPathAtCenter];
Run Code Online (Sandbox Code Playgroud)

或者,您可以获得所有可见的 indexPaths 并选择中间的一个:

NSArray<NSIndexPath*> *visibleIndexPaths = [self.tableView indexPathsForVisibleRows];
NSIndexPath *middleIndexPath = visibleIndexPaths[visibleIndexPaths.count/2];
UITableViewCell *centerCell = [self.tableView cellForRowAtIndexPath: middleIndexPath];
Run Code Online (Sandbox Code Playgroud)

取决于您的其余实现,您想要走哪条路线!


小智 6

在斯威夫特 4

对于中心的确切索引号,我们可以简单地使用:-

let middleIndex = ((heightTableView.indexPathsForVisibleRows?.first?.row)! + (heightTableView.indexPathsForVisibleRows?.last?.row)!)/2
Run Code Online (Sandbox Code Playgroud)


d4R*_*4Rk 5

基于之前的答案,针对 Swift 4 和 5 的更优雅的解决方案:

let indexPath = tableView.indexPathForRow(at: tableView.bounds.center)
Run Code Online (Sandbox Code Playgroud)

使用这个小CGRect扩展:

extension CGRect {
    var center: CGPoint {
        return CGPoint(x: self.midX, y: self.midY)
    }
}
Run Code Online (Sandbox Code Playgroud)