有没有办法自动滚动到 UICollectionView 的底部
Posted
技术标签:
【中文标题】有没有办法自动滚动到 UICollectionView 的底部【英文标题】:Is there a way to automatically scroll to the bottom of a UICollectionView 【发布时间】:2013-06-06 07:07:06 【问题描述】:所以我目前正在开发一个项目,该项目有一个将单元格添加到 UICollectionView 的按钮,然后需要自动滚动到最后一个单元格(即 UICollectionView 的底部)。
我找到了方法
scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:(BOOL)animated
但现在我在试图找到 CollectionView 中最后一个对象的indexPath
时遇到了困难。
问题似乎在于我一直试图将 UICollectionView 中的单元格视为一个数组(无法枚举它们,不响应lastObject
等等)。我似乎能得到的最接近的是方法visibleItems
,它确实给了我一个数组,但当我需要添加到可见框架之外的单元格时没有帮助。
有没有办法获取 CollectionView 中最后一个对象的 IndexPath?
【问题讨论】:
你的数据源是什么?如何获取数据源的计数以确定最后的索引路径? 【参考方案1】:你可以问你的数据源:
NSInteger section = [self numberOfSectionsInCollectionView:self.collectionView] - 1;
NSInteger item = [self collectionView:self.collectionView numberOfItemsInSection:section] - 1;
NSIndexPath *lastIndexPath = [NSIndexPath indexPathForItem:item inSection:section];
【讨论】:
就是这样!谢谢!我想我一直忽略 indexPath 的section
部分,所以它看起来像 [15] 而不是这给我的 [0, 15]。
另请注意,滚动位置UICollectionViewScrollPositionBottom
将滚动直到单元格可见。如果你想一直滚动到集合视图的底部,包括底部插图,请使用UICollectionViewScrollPositionTop
。【参考方案2】:
这是您的答案...如果您不想想询问数据源。
将其添加到您的 viewDidAppear:
方法中。
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];
【讨论】:
【参考方案3】: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)
【讨论】:
我猜你可以避免多余的2个变量lastIndex path和item,直接在scrollToItem方法中创建indexpath【参考方案4】:我遇到了一个问题,我可以滚动到集合视图中的 最后一个 项,但无法滚动到 页脚。
以下代码修复了该问题:
let bottomOffset = CGPoint(x: 0,
y: collectionView.frame.height + (collectionView.contentSize.height * CGFloat(itemsInCollectionView.count)))
collectionView.setContentOffset(bottomOffset, animated: false)
【讨论】:
【参考方案5】:我会先检查是否有滚动到底部的选项,以防万一您的数据出现问题并且您的表/集合视图没有行。
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)
【讨论】:
以上是关于有没有办法自动滚动到 UICollectionView 的底部的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法防止 Xamarin Forms 滚动视图在打开选择器控件时自动滚动到最后编辑的条目?
UICollectionView 中的图像在向下滚动时会自动翻转?