7

我正在尝试使用 UICollectionView 在屏幕居中的当前视图的左侧和右侧显示视图。

我有这个正确显示,但水平分页没有以后续视图为中心,因为它默认为框架的宽度,即 320.0。

UICollectionView 在哪里计算剪切到下一页时使用的默认偏移值?

我想改变这个值。有一个更好的方法吗?本质上,我正在尝试重新创建在 iphone 上的应用商店搜索结果中使用的体验。

4

3 回答 3

11

事实证明,我必须设置pagingEnabled = NO和覆盖(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView以下内容:

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
  if (self.lastQuestionOffset > scrollView.contentOffset.x)
    self.currentPage = MAX(self.currentPage - 1, 0);
  else if (self.lastQuestionOffset < scrollView.contentOffset.x)
    self.currentPage = MIN(self.currentPage + 1, 2);

  float questionOffset = 290.0 * self.currentPage;
  self.lastQuestionOffset = questionOffset;
  [self.collectionView setContentOffset:CGPointMake(questionOffset, 0) animated:YES];
}

这个答案有帮助: Paging UIScrollView with different page widths

于 2013-02-14T23:02:25.700 回答
6

我认为最好的解决方案是添加一个自定义 UICollectionViewFlowLayout 子类并覆盖

- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)contentOffset  
                                 withScrollingVelocity:(CGPoint)velocity

我在这里写了一个例子:https ://gist.github.com/mmick66/9812223

于 2014-03-27T18:24:01.747 回答
0

尝试在viewDidLayoutSubviews中设置 contentOffset

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    if (viewDidLayoutSubviewsForTheFirstTime) {
        _collectionView.contentOffset = CGPointMake(...);
    }
}
于 2016-03-21T06:02:12.850 回答