我有一个水平UICollectionView
的正常工作和卷轴。 当我点击一个项目更新我的数据,并调用reloadData
。 这工作和新的数据显示在UICollectionView
。 问题是滚动位置不会改变,它仍然是看最后的地方。 我想重置滚动到顶部(或在我的情况下离开)。 我怎样才能做到这一点?
Answer 1:
您可以使用此方法来滚动到你想要的任何项目:
- (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath
atScrollPosition:(UICollectionViewScrollPosition)scrollPosition
animated:(BOOL)animated
Answer 2:
你想setContentOffset:
它需要一个CGPoint的,并且你可以设置你想要使用CGPointMake什么都的说法,但如果你想返回到集合的一开始,你可以简单地使用CGPointZero。
[collectionView setContentOffset:CGPointZero animated:YES];
Answer 3:
我在我的应用程序,所以我只是延长的UIScrollView所以它可以在任何滚动视图中使用,滚动视图子类的不同部分经常使用这样的:
extension UIScrollView {
/// Sets content offset to the top.
func resetScrollPositionToTop() {
self.contentOffset = CGPoint(x: -contentInset.left, y: -contentInset.top)
}
}
所以每当我需要重置的位置:
self.collectionView.resetScrollPositionToTop()
Answer 4:
在斯威夫特:
collectionView.setContentOffset(CGPointZero, animated: true)
如果你离开,里面的集合视图的视图中,在第二视图控制器的变化,需要集合视图在返回更新:
@IBAction func unwindTo_CollectionViewVC(segue: UIStoryboardSegue) {
//Automatic table reload upon unwind
viewDidLoad()
collectionView.reloadData()
collectionView.setContentOffset(CGPointZero, animated: true)
}
在我的情况开卷是伟大的,因为viewDidLoad中调用将更新CoreData背景下,reloadData通话将确保的CollectionView更新以反映新CoreData背景,然后contentOffset将确保该表将重回巅峰。
Answer 5:
因为你不是在数以内容插入CGPointZero在我的情况下转移集合视图的内容。 这是它为我工作:
CGPoint topOffest = CGPointMake(0,-self.collectionView.contentInset.top);
[self.collectionView setContentOffset:topOffest animated:YES];
Answer 6:
抱歉,我不能在写这篇文章的时候发表评论,但我是用一个UINavigationController和CGPointZero
本身没有让我最顶端,所以我不得不改用以下。
CGFloat compensateHeight = -(self.navigationController.navigationBar.bounds.size.height+[UIApplication sharedApplication].statusBarFrame.size.height);
[self.collectionView setContentOffset:CGPointMake(0, compensateHeight) animated:YES];
希望这可以帮助别人的未来。 干杯!
Answer 7:
如果您查看控制器包含安全区,代码:
collectionView.setContentOffset(CGPointZero, animated: true)
不工作,所以你可以使用通用的扩展:
extension UIScrollView {
func scrollToTop(_ animated: Bool) {
var topContentOffset: CGPoint
if #available(iOS 11.0, *) {
topContentOffset = CGPoint(x: -safeAreaInsets.left, y: -safeAreaInsets.top)
} else {
topContentOffset = CGPoint(x: -contentInset.left, y: -contentInset.top)
}
setContentOffset(topContentOffset, animated: animated)
}
}
Answer 8:
为了对付一个UINavigationController
和透明的导航栏,我不得不计算额外顶偏完美匹配的第一个元素的位置。
雨燕1.1的代码:
let topOffest = CGPointMake(0, -(self.collectionView?.contentInset.top ?? O))
self.collectionView?.setContentOffset(topOffest, animated: true)
干杯!
文章来源: Reset scroll on UICollectionView