我正在实现一个UICollectionView,它只显示一行单元格。它就像一个图像封面流程。这意味着我已经将UICollectionViewFlowLayout子类化了。当我用手指滚动时,我的实现工作正常,这意味着调用了以下委托方法,我将单元格置于中心位置;
-(CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity
然而,当视图加载时,我希望视图自动滚动到单元格。对于这个自动滚动,我使用以下内容;
[self.CollectionView scrollToItemAtIndexPath:_selectedIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
问题是没有调用targetContentOffsetForProposedContentOffset,因此当自动滚动完成时,单元格偏离中心。
那么我怎么能以编程方式滚动我的集合视图,以便它也将集中在滚动到的单元格上?
答案 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];