如何在集合视图中查找最后一个可见单元格的索引路径。但索引路径随机不断变化

时间:2017-08-02 08:34:29

标签: uicollectionview cell nsindexpath

我尝试了以下代码,从collectionview中找出最后一条可见索引路径,但可见单元格不断变化,我无法找到最后一个可见项目。

for cell: UICollectionViewCell in collView.visibleCells {
     // indexPath = collView.indexPathForCell(cell)!
        var visibleRect = CGRect()
        visibleRect.origin = collView.contentOffset
        visibleRect.size = collView.bounds.size
        let visiblePoint = CGPoint(x: visibleRect.width, y: visibleRect.height)
        if  let indexPath = collView.indexPathForItem(at: visiblePoint) //If let is
        {
            return indexPath
        } else {
            return IndexPath(row: NSNotFound, section: 0)
        }

}

输出

"<NSIndexPath: 0x17422c680> {length = 2, path = 0 - 4}",
"<NSIndexPath: 0x17403e0c0> {length = 2, path = 0 - 6}",
"<NSIndexPath: 0x1742261c0> {length = 2, path = 0 - 10}",
"<NSIndexPath: 0x17422adc0> {length = 2, path = 0 - 1}",
"<NSIndexPath: 0x1742205e0> {length = 2, path = 0 - 3}",
"<NSIndexPath: 0x17422a1a0> {length = 2, path = 0 - 7}",
"<NSIndexPath: 0x174227080> {length = 2, path = 0 - 9}",
"<NSIndexPath: 0x174229b40> {length = 2, path = 0 - 0}"

1 个答案:

答案 0 :(得分:1)

您可以使用indexPathsForVisibleItems获取UICollectionView中可见项的indexPath数组。

var indexPathsForVisibleItems: [IndexPath] { get }
  

此属性的值是一个未排序的IndexPath对象数组,   每个对应于集合视图中的可见单元格。   此数组不包含当前的任何补充视图   可见。如果没有可见项,则此属性的值为   一个空数组。

就像您指定的照片应用中一样,您将在数组中获得多个IndexPath元素,因为在特定时刻可以看到多个元素。

另外,我不明白最后一个可见索引是什么意思。如果有任何进一步的帮助,请更清楚。

修改:

示例: 我创建了一个UICollectionView,其中包含 30个单元格和1个。 对于以下屏幕:

enter image description here

我使用了以下代码行:

    let arrayOfVisibleItems = collectionView.indexPathsForVisibleItems.sorted()
    let lastIndexPath = arrayOfVisibleItems.last
    print("Array: ", arrayOfVisibleItems)
    print("Last IndexPath: ", lastIndexPath)        

<强>输出:

Array:  [[0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [0, 5], [0, 6], [0, 7], [0, 8], [0, 9], [0, 10], [0, 11], [0, 12], [0, 13], [0, 14], [0, 15], [0, 16], [0, 17], [0, 18], [0, 19], [0, 20]]

Last IndexPath:  Optional([0, 20])