iOS根据UICollectionview中的页面定义单元格数(Collectionview with Paging)

时间:2016-04-30 06:39:17

标签: ios objective-c pagination uicollectionview

我正在使用 Collectionvew with Paging 。我成功地使用Paging完成了collectionview。它的工作完美无缺。

但问题是我只需要 10个单元格在1页,然后另外10个单元格第2页和第3页的Next 10单元格。但是我不知道当页面改变时我怎么能得到它。我还想改变标题 当页面改变时,简单,中等和难度(级别)。

目前我在collectionview中拍摄了30个单元格。这是我的collectionview方法,

enter image description here

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return 1;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView
     numberOfItemsInSection:(NSInteger)section
{
       return kNumberOfCells;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
                  cellForItemAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *identifier = @"GameCollectionViewCell";
    GameCollectionViewCell *cell = (GameCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

    if (cell == nil)
    {
        NSArray *xib = [[NSBundle mainBundle] loadNibNamed:@"HomeCollectionViewCell" owner:self options:nil];
        cell = [xib objectAtIndex:0];
    }
    cell.lblLevel.text=[NSString stringWithFormat:@"%d",indexPath.item+1];
    cell.lblLevelPoints.text=@"points";
    return cell;
}

#pragma mark – UICollectionViewDelegateFlowLayout

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    float width = collectionView.frame.size.width/6.4;//120
    float height = collectionView.frame.size.height/4;//120
    return CGSizeMake(width,width);
}
- (UIEdgeInsets)collectionView:
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
    return UIEdgeInsetsMake(8.0, 14.0, 5.0, 14.0);//TOP , LEFT ,BOTTOM ,RIGHT
}

输出目前我得到: -

enter image description here

3 个答案:

答案 0 :(得分:1)

有两种解决方案:

解决方案1: 你可以采取第3节的数量。每节有10个项目。对于每个部分,您都更改了UIPageControl的当前页面并更改了标题。

解决方案2:

  1. 将PageControl置于视图中或按代码设置。

  2. 设置UIScrollViewDelegate

  3. 在Collectionview中 - > cellForItemAtIndexPath(方法)添加 下面的代码用于计算页数,

    int pages =floor(ImageCollectionView.contentSize.width/ImageCollectionView.frame.size.width);
    
    [pageControl setNumberOfPages:pages];
    
  4. 添加ScrollView Delegate方法

     pragma mark - UIScrollVewDelegate for UIPageControl
    
        - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
        {
        CGFloat pageWidth = ImageCollectionView.frame.size.width;
        float currentPage = ImageCollectionView.contentOffset.x /   pageWidth;
    
        if (0.0f != fmodf(currentPage, 1.0f))
        {
             pageControl.currentPage = currentPage + 1;
        }
        else
        {
        pageControl.currentPage = currentPage;
        }
        NSLog(@"finishPage: %ld", (long)pageControl.currentPage);
        } 
    

    参考链接: Collectionview + Pagecontrol

    <强>更新

    我在Github上也有一个示例代码。它可以帮助你: https://github.com/maniyarpayal/PagingWithCollectionView

答案 1 :(得分:0)

尝试这种委托方法,

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{

    return CGSizeMake((self.view.frame.size.width / 5) , self.view.frame.size.height / 2);

}


- (NSUInteger)maximumNumberOfColumnsForCollectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout
{

     return 5;
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
    return 0.0;
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
{
    return 0.0;
}

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{

    return UIEdgeInsetsMake(0, 0, 0, 0);
}

我也有同样的问题,然后使用上面的方法,它将为我工作,希望它有用。

答案 2 :(得分:0)

  

您可以使用此委托方法,但您必须根据您的要求进行自定义,因为我没有提到单元格和x原点之间的距离。您必须减去视图宽度的距离。希望这会对你有所帮助。

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
    {

    return CGSizeMake((self.view.frame.size.width / 10) , self.view.frame.size.height / 2);

 }