Objective c 如何在具有scrollToItemAtIndexPath的UICollectionView中使用内容偏移量将单元格居中

Objective c 如何在具有scrollToItemAtIndexPath的UICollectionView中使用内容偏移量将单元格居中,objective-c,uicollectionview,uicollectionviewlayout,Objective C,Uicollectionview,Uicollectionviewlayout,我正在实现一个UICollectionView,它只显示一行单元格。它就像一个图像覆盖流。这意味着我已将UICollectionViewFlowLayout子类化。当我使用手指滚动时,我的实现工作正常,这意味着调用了下面的委托方法,并且我将单元格居中 -(CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity

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

-(CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity
但是,当视图加载时,我希望视图自动滚动到单元格。对于此自动滚动,我使用以下命令:

[self.CollectionView scrollToItemAtIndexPath:_selectedIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
问题在于未调用targetContentOffsetForProposedContentOffset,因此当自动滚动完成时,单元格偏离中心


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

自己解决了这个问题

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

我已经按照书中建议的方式发布了以下内容。根据您想要的索引XPath,您需要自己计算集合视图的偏移量,然后使用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];

我自己解决了这个问题

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

我已经按照书中建议的方式发布了以下内容。根据您想要的索引XPath,您需要自己计算集合视图的偏移量,然后使用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];