我有一个UICollectionView,它有相当多的UICollectionViewCells上.当我点击时,我想将单元格滚动到UICollectionView的中心.我的关注是,即使我点击最后一个或顶部的单元格,它应该移动到集合视图的中心.
我已经尝试设置contentInsets和偏移量,但似乎不起作用.我想我将不得不更改选择的内容大小,并在滚动开始时将其更改为原始.
解决方法
设置contentInsets应该在第一个和最后一个单元格周围留出一些额外的空间:
CGFloat collectionViewHeight = CGRectGetHeight(collectionView.bounds); [collectionView setContentInset: UIEdgeInsetsMake(collectionViewHeight/2,collectionViewHeight/2,0) ]; // nb,those are top-left-bottom-right
你应该打电话:
[collectionView scrollToItemAtIndexPath:selectedItemPath atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:YES];
传递正确的滚动位置很重要:UICollectionViewScrollPositionCenteredVertically
这应该正确地中心轻敲物品.
编辑
这真的很奇怪,但是在将UIEdgeInsets设置为集合视图方法之后,scrollToItemAtIndexPath无法正常工作,所以我进行了一些修改:
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { CGFloat collectionViewHeight = CGRectGetHeight(self.collectionView.frame); [collectionView setContentInset:UIEdgeInsetsMake(collectionViewHeight / 2,collectionViewHeight / 2,0)]; UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; CGPoint offset = CGPointMake(0,cell.center.y - collectionViewHeight / 2); [collectionView setContentOffset:offset animated:YES]; }
它对我来说很好.