如何使用 scrollToItemAtIndexPath 在 UICollectionView 中以内容偏移量居中单元格

How to center a cell with the content offset in a UICollectionView with scrollToItemAtIndexPath

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

-(CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity

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

[self.CollectionView scrollToItemAtIndexPath:_selectedIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];

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

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

我自己解决了这个问题。

根据书本"iOS UICollectionView The Complete Guide"(清单 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];