Nirma
Nirma

Reputation: 5790

Paging in Collection View not centering properly

I have a UICollectionView with paging enabled and the individual views that are moving horizontally are not getting centered properly. I have made sure that the views are the same width as the screen.

Any pointers on how to force the UICollectionView to page the views horizontally?

Upvotes: 6

Views: 3833

Answers (2)

evya
evya

Reputation: 3647

Override the method:

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

Upvotes: 0

CEarwood
CEarwood

Reputation: 1685

You have to make sure that your section inset + line spacing + cell width all equals exactly the bounds of the CollectionView. I use the following method on a custom 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;
}

You have to remember that UICollectionView is just a sublcass of UIScrollView so it doesn't know how you want your pagination to work. Before UICollectionView you would have to handle all of this math when laying out your subviews of the UIScrollView.

Upvotes: 3

Related Questions