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

时间:2015-03-21 11:15:22

标签: objective-c uicollectionview uicollectionviewlayout

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:5)

我自己解决了这个问题。

根据书籍&#34; iOS UICollectionView完整指南&#34; (清单6.7)scrollToItemAtIndexPath:不能在此封面流类型布局中使用,因为它不会使单元格居中。< / p>

我已在下面发布了书中建议的方式。基于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];