集合视图中的分页未正确居中

Posted

技术标签:

【中文标题】集合视图中的分页未正确居中【英文标题】:Paging in Collection View not centering properly 【发布时间】:2013-03-04 15:02:06 【问题描述】:

我有一个启用了分页的 UICollectionView,并且水平移动的各个视图没有正确居中。 我已确保视图与屏幕的宽度相同。

关于如何强制 UICollectionView 水平分页视图的任何指针?

【问题讨论】:

您解决了吗?我有同样的问题。细胞偏离中心,当我滚动偏离中心的化合物时,情况会变得更糟。 @IkegawaTaro 这里有同样的问题。你解决了吗? 【参考方案1】:

您必须确保您的部分插入 + 行距 + 单元格宽度都完全等于 CollectionView 的边界。我在自定义 UICollectionViewFlowLayout 子类上使用以下方法:

- (void)adjustSpacingForBounds:(CGRect)newBounds 
  NSInteger count = newBounds.size.width / self.itemSize.width - 1;

  CGFloat spacing = (newBounds.size.width - (self.itemSize.width * count)) / count;

  self.minimumLineSpacing = spacing;

  UIEdgeInsets insets = self.sectionInset;
  insets.left = spacing/2.0f;
  self.sectionInset = insets;

您必须记住 UICollectionView 只是 UIScrollView 的子类,因此它不知道您希望分页如何工作。在 UICollectionView 之前,您必须在布置 UIScrollView 的子视图时处理所有这些数学运算。

【讨论】:

我在哪里放置这个方法?我什么时候/在哪里叫它?【参考方案2】:

重写方法:

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset 
    *targetContentOffset = scrollView.contentOffset; // set acceleration to 0.0
    float pageWidth = (float)self.articlesCollectionView.bounds.size.width;
    int minSpace = 10;

    int cellToSwipe = (scrollView.contentOffset.x)/(pageWidth + minSpace) + 0.5; // cell width + min spacing for lines
    if (cellToSwipe < 0) 
        cellToSwipe = 0;
     else if (cellToSwipe >= self.articles.count) 
        cellToSwipe = self.articles.count - 1;
    
    [self.articlesCollectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:cellToSwipe inSection:0] atScrollPosition:UICollectionViewScrollPositionLeft animated:YES];

【讨论】:

以上是关于集合视图中的分页未正确居中的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift 3中的表视图单元格中实现集合视图的分页?

启用分页时将水平可滚动集合视图的单元格居中并使其他单元格部分可见

Bootstrap-Vue 分页未在屏幕上显示更新的切片数组内容

如何正确地将 KNP Paginator Bundle 的分页居中?

在集合视图和分页详细视图之间转换的正确方法

计算哪个图像用户在水平集合视图上,启用分页