如何获取 uicollectionview 的最后一个索引路径?

Posted

技术标签:

【中文标题】如何获取 uicollectionview 的最后一个索引路径?【英文标题】:How to get the last indexpath of a uicollectionview? 【发布时间】:2015-02-19 19:21:39 【问题描述】:

我想获取 uicollectionview 的最后一个 indexpath。

我试过了:

 NSInteger section = [self numberOfSectionsInCollectionView:self.collectionView] - 1;
NSInteger item = [self collectionView:self.collectionView numberOfItemsInSection:section] - 1;
NSIndexPath *lastIndexPath = [NSIndexPath indexPathForItem:item inSection:section];

但找不到 uicollectionview 的最后一个索引路径。

任何建议, 提前致谢。

【问题讨论】:

代码看起来没问题。 “找不到 uicollectionview 的最后一个索引路径”是什么意思? NSLog(@"%@", indexPath) 的输出是什么?预期的输出是什么? NSInteger section = [_collectionView numberOfSections] - 1 ; NSInteger item = [_collectionView numberOfItemsInSection:section] - 2 ; NSIndexPath *lastIndexPath = [NSIndexPath indexPathForItem:item inSection:section] ;这对我来说很好......感谢您的评论 你为什么不从你的 model 创建索引路径呢?这样会感觉更自然,而不是弄乱 view 【参考方案1】:
NSInteger lastSectionIndex = [tableView numberOfSections] - 1;
NSInteger lastRowIndex = [tableView numberOfRowsInSection:lastSectionIndex] - 1;

// Now just construct the index path
NSIndexPath *pathToLastRow = [NSIndexPath indexPathForRow:lastRowIndex inSection:lastSectionIndex];

【讨论】:

注意NSInteger lastRowIndex = [tableView numberOfRowsInSection:lastSectionIndex] - 1;如果最后一节有0个项目会崩溃。【参考方案2】:

Swift 3 的答案

extension UICollectionView 

    func scrollToLastIndexPath(position:UICollectionViewScrollPosition, animated: Bool) 
        self.layoutIfNeeded()

        for sectionIndex in (0..<self.numberOfSections).reversed() 
            if self.numberOfItems(inSection: sectionIndex) > 0 
                self.scrollToItem(at: IndexPath.init(item: self.numberOfItems(inSection: sectionIndex)-1, section: sectionIndex),
                                  at: position,
                                  animated: animated)
                break
            
        
    


请注意,我的经验表明 animated 属性应该是 false 用于初始化 collectionView。

从上面的代码中,作为您问题的答案,请使用以下方法:

func lastIndexPath() -> IndexPath? 
    for sectionIndex in (0..<self.numberOfSections).reversed() 
        if self.numberOfItems(inSection: sectionIndex) > 0 
            return IndexPath.init(item: self.numberOfItems(inSection: sectionIndex)-1, section: sectionIndex)
        
    

    return nil

【讨论】:

以上是关于如何获取 uicollectionview 的最后一个索引路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测最后一个单元格是不是在 UICollectionView 中可见?

Swift 3:如何将 UICollectionView 中的最后一行单元格水平居中,只有一个部分?

如何防止重新排序 UICollectionView 中的最后一个单元格?

如何滚动到 UITableView 或 UICollectionView 中的最后一个单元格之外

如何使用 UITableview 或 UICollectionView 在表格的最后一行显示数字列的总值?

UICollectionView 仅显示最后一部分的页脚