在集合视图中分页不能正确居中

时间:2013-03-04 15:02:06

标签: ios uicollectionview

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

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

2 个答案:

答案 0 :(得分:3)

你必须确保你的section inset + line spacing + cell width都完全等于CollectionView的边界。我在自定义UICollectionViewFlowLayout sublcass上使用以下方法:

- (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的子视图时,你必须处理所有这些数学。

答案 1 :(得分:0)

覆盖方法:

- (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];
}