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,因此当自动滚动完成时,单元格偏离中心.
那么我怎么能以编程方式滚动我的集合视图,以便它也将中心滚动到的单元格?
自己解决了这个问题.
根据书"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)
| 归档时间: |
|
| 查看次数: |
1941 次 |
| 最近记录: |