ios – 当UICollectionView被点击时如何居中?

前端之家收集整理的这篇文章主要介绍了ios – 当UICollectionView被点击时如何居中?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个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];
}

它对我来说很好.

猜你在找的iOS相关文章