我使用以下代码在水平方向上分页了collection view

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.collectionView.pagingEnabled = YES;
    self.collectionView.directionalLockEnabled = YES;
    self.collectionView.bounces = NO;
    self.collectionView.showsHorizontalScrollIndicator = NO;
    self.collectionView.delegate = self;

    [self setup];

    self.pageControl.currentPage = 0;

    self.pageControl.numberOfPages = floor(self.collectionView.contentSize.width /   self.collectionView.frame.size.width) + 1;
}

我正在使用pageControl指示我有多少页以及当前页。

我使用了类似于以下链接的方法来确定当前页面。

iOS6 UICollectionView and UIPageControl - How to get visible cell?

UICollectionView: current index path for page control

如下。
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    NSInteger currentPage = self.collectionView.contentOffset.x / self.collectionView.frame.size.width;
    self.pageControl.currentPage = currentPage;
}

但是,它不起作用。当我将collection view滑动到下一页时,pageControl仍指向第一页。它不会改变其值。

我打印出了self.collectionView.contentOffset.x值,该值始终在框架内(这是第一页,即使我已刷到下一页),也从未到下一页。

我做错什么了吗?

最佳答案

您是否考虑了单元格之间的间距?

试试这个:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    float currentPage = self.collectionView.contentOffset.x / self.collectionView.frame.size.width;
    self.pageControl.currentPage = ceil(currentPage);

    NSLog(@"Values: %f %f %f", self.collectionView.contentOffset.x, self.collectionView.frame.size.width, ceil(currentIndex));
}

07-24 21:22