5

所以我目前正在开发一个项目,该项目有一个将单元格添加到 UICollectionView 的按钮,然后需要自动滚动到最后一个单元格(即 UICollectionView 的底部)。

我找到了方法 scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:(BOOL)animated

但现在我被困在试图找到indexPathCollectionView 中的最后一个对象。

问题似乎在于我一直试图将 UICollectionView 中的单元格视为一个数组(无法枚举它们,不响应lastObject等等)。我似乎能得到的最接近的是visibleItems确实我一个数组但当我需要在可见框架之外添加的单元格时没有帮助的方法。

有没有办法获取 CollectionView 中最后一个对象的 IndexPath?

4

5 回答 5

15

您可以询问您的数据源:

NSInteger section = [self numberOfSectionsInCollectionView:self.collectionView] - 1;
NSInteger item = [self collectionView:self.collectionView numberOfItemsInSection:section] - 1;
NSIndexPath *lastIndexPath = [NSIndexPath indexPathForItem:item inSection:section];
于 2013-06-07T01:21:41.000 回答
2

Here is your answer... If you don't want to ask datasource.

Add it in your viewDidAppear: method.

NSInteger section = [_collectionView numberOfSections] - 1 ;
NSInteger item = [_collectionView numberOfItemsInSection:section] - 1 ;
NSIndexPath *lastIndexPath = [NSIndexPath indexPathForItem:item inSection:section] ;
[_collectionView scrollToItemAtIndexPath:lastIndexPath atScrollPosition:(UICollectionViewScrollPositionBottom) animated:YES];
于 2015-01-28T07:23:29.200 回答
1

Swift 3 & 4,假设你只有一个部分:

func scrollToBottom() {
    let section = 0
    let item = collectionView.numberOfItems(inSection: section) - 1
    let lastIndexPath = IndexPath(item: item, section: section)
    collectionView.scrollToItem(at: lastIndexPath, at: .bottom, animated: false)
}
于 2017-06-12T11:16:20.673 回答
1

我遇到了一个问题,我可以滚动到集合视图中的最后一项,但无法滚动到footer的底部。

以下代码修复了该问题:

let bottomOffset = CGPoint(x: 0, 
                           y: collectionView.frame.height + (collectionView.contentSize.height * CGFloat(itemsInCollectionView.count)))
collectionView.setContentOffset(bottomOffset, animated: false)
于 2019-02-14T17:23:39.153 回答
0

我会先检查是否有滚动到底部的选项,以防万一您的数据出现问题并且您的表/集合视图没有行。

func scrollToBottomIfPossible() {

    guard self.myRows.count > 0 else {
            return
    }

    self.collectionView.scrollToItem(at: IndexPath(row: yourItems.count - 1, section: mySections.count), at: .bottom, animated: true)
}
于 2018-10-10T10:45:32.643 回答