如何使用scrollToItemAtIndexPath将具有内容偏移量的单元格置于UICollectionView中

dar*_*bid 0 objective-c uicollectionview uicollectionviewlayout

我正在实现一个UICollectionView,它只显示一行单元格.它就像一个图像封面流程.这意味着我已经将UICollectionViewFlowLayout子类化了.当我用手指滚动时,我的实现工作正常,这意味着调用了以下委托方法,我将单元格置于中心位置;

-(CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity
Run Code Online (Sandbox Code Playgroud)

但是,当视图加载时,我希望视图自动滚动到单元格.对于这个自动滚动我使用以下内容;

[self.CollectionView scrollToItemAtIndexPath:_selectedIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
Run Code Online (Sandbox Code Playgroud)

问题是没有调用targetContentOffsetForProposedContentOffset,因此当自动滚动完成时,单元格偏离中心.

那么我怎么能以编程方式滚动我的集合视图,以便它也将中心滚动到的单元格?

dar*_*bid 5

自己解决了这个问题.

根据书"iOS UICollectionView完整指南"(清单6.7),scrollToItemAtIndexPath:不能在此封面流类型布局中使用,因为它不会使单元格居中.

我已在下面发布了书中建议的方式.基于indexPath,您需要自己计算集合视图的偏移量,然后使用targetContentOffsetForProposedContentOffset:自动为您居中.

CGPoint proposedOffset = CGPointMake(0, 0);

proposedOffset.x = _selectedIndexPath.item * (flow.itemSize.width + flow.minimumLineSpacing);

CGPoint contentOffset = [flow targetContentOffsetForProposedContentOffset:proposedOffset withScrollingVelocity:CGPointMake(0, 0)];

[self.statCollectionView setContentOffset:contentOffset animated:YES];
Run Code Online (Sandbox Code Playgroud)