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

时间:2017-10-18 07:37:27

标签: ios uitableview

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

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

3 个答案:

答案 0 :(得分:1)

获取中心行有两种选择。一种方法是将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];

或者,您可以获取所有可见的indexPath并选择中间的:

NSArray<NSIndexPath*> *visibleIndexPaths = [self.tableView indexPathsForVisibleRows];
NSIndexPath *middleIndexPath = visibleIndexPaths[visibleIndexPaths.count/2];
UITableViewCell *centerCell = [self.tableView cellForRowAtIndexPath: middleIndexPath];

取决于您实施的其余部分您想要去哪条路线!

答案 1 :(得分:1)

在Swift 4中

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

let middleIndex = ((heightTableView.indexPathsForVisibleRows?.first?.row)! + (heightTableView.indexPathsForVisibleRows?.last?.row)!)/2

答案 2 :(得分:0)

一种基于先前答案的更优雅的解决方案,适用于Swift 4和5:

let indexPath = tableView.indexPathForRow(at: tableView.bounds.center)

使用这个小的CGRect扩展名:

extension CGRect {
    var center: CGPoint {
        return CGPoint(x: self.midX, y: self.midY)
    }
}