启用了分页的UICollectionView

use*_*698 5 paging objective-c uiscrollview ios uicollectionview

我必须像Appstore iOS应用程序一样创建网格视图.我想用UICollectionView分页来做这件事.我也实现了代码但不能像那样滚动.

我想要做的是在中心和两侧(左侧和右侧)将有一个图像,它应该显示上一个和下一个图像的一些部分.我为UICollectionView设置了帧为320*320.细胞大小为290*320.(细胞最小间距为10)1

以下是描述我的要求的两个链接.提前致谢.

(这就是我想要的)2

Dee*_*pak 11

您是否尝试将UICollectionViewFlowLayout的滚动方向设置为水平?

[yourFlowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];

您需要在集合视图上启用分页,如下所示:

[yourCollectionView setPagingEnabled:YES];

  • 对于那些使用 Storyboards 的人,您还可以在 Collection View 的 Attribute Inspector 中的 Interface Builder 中找到复选框 Paging Enabled。 (2认同)

Ric*_*ter 6

我采取了shtefane的答案并对其进行了改进.输入您自己的cellWidthcellPadding值.

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
                     withVelocity:(CGPoint)velocity
              targetContentOffset:(inout CGPoint *)targetContentOffset
{
    CGFloat cellWidth = self.cellWidth;
    CGFloat cellPadding = 9;

    NSInteger page = (scrollView.contentOffset.x - cellWidth / 2) / (cellWidth + cellPadding) + 1;

    if (velocity.x > 0) page++;
    if (velocity.x < 0) page--;
    page = MAX(page,0);

    CGFloat newOffset = page * (cellWidth + cellPadding);
    targetContentOffset->x = newOffset;
}
Run Code Online (Sandbox Code Playgroud)


小智 4

如果您在 collectionView 中使用分页,它将滚动一页而不是一个单元格。您可以禁用分页并实现 ScrollViewDelegate

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
 {
     CGFloat pageW = 300;
    int page = scrollView.contentOffset.x / pageW;

    CGFloat newOffset =(page + ((velocity.x > 0)? 1 : -1)) * (pageW - 20);
    CGPoint target = CGPointMake(newOffset, 0);
    targetContentOffset = &target;
    NSLog(@"end Drag at %f /%i /%f",scrollView.contentOffset.x, page, velocity.x);

 }
Run Code Online (Sandbox Code Playgroud)

与标准分页只有一处不同:如果快速拖动,集合将滚动多个单元格。并且不要忘记添加 UIScrollViewDelegate