UICollectionView如何实现水平对齐滚动

UICollectionView How to implement horizontal align scrolling

我有一个 UICollection 已经实现并且可以工作,但是我无法实现我想要的滚动。

这是我的 UICollectionView 的照片,我已通过 250 将灰色单元格的大小调整为 250

我的问题是,当我开始滚动时,会发生这种情况。

我的单元格首先从最左边开始,但请注意如果我开始水平滚动会发生什么。

如您所见,我在单元格中滚动得越多,单元格之间的接缝就会向左移动。这不是我想要的。

我想要实现的是:单元格居中对齐,当你滚动时,我希望单元格保持在中间,而不是单元格的中心越来越向左移动。很像 PageViewController 除了我希望它是 UICollectionViewCells

我尝试添加以下代码,例如:

    - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
    float pageWidth = 210;

    float currentOffset = scrollView.contentOffset.x;
    float targetOffset = targetContentOffset->x;
    float newTargetOffset = 0;

    if (targetOffset > currentOffset)
        newTargetOffset = ceilf(currentOffset / pageWidth) * pageWidth;
    else
        newTargetOffset = floorf(currentOffset / pageWidth) * pageWidth;

    if (newTargetOffset < 0)
        newTargetOffset = 0;
    else if (newTargetOffset > scrollView.contentSize.width)
            newTargetOffset = scrollView.contentSize.width;

        targetContentOffset->x = currentOffset;
        [scrollView setContentOffset:CGPointMake(newTargetOffset, 0) animated:YES];
    }

这实现了均匀滚动,但是我想启用 paging 以及 bounce

因为如果我启用 pagingbounce,滚动会非常流畅和优雅,但是如果我使用上面的代码,滚动会非常粗糙和机械。

那么如何实现像苹果默认滚动一样平滑的滚动,我的 UICollectionViewCell 居中于中间?

如果我没有很好地解释问题,这个 post here 解释了我的问题,除了我使用一个单元格而不是三个单元格,并且我希望滚动平滑和弹跳等等

我认为这应该可行(禁用分页):

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
  if (!decelerate) {
    // do your calculations
    [scrollView setContentOffset:CGPointMake(newTargetOffset, 0) animated:YES];
  }
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
  // do your calculations
  [scrollView setContentOffset:CGPointMake(newTargetOffset, 0) animated:YES];
}