在集合视图

时间:2016-03-18 12:03:07

标签: ios objective-c cocoa-touch

我使用CollectionViewController首先渲染3个自定义视图,第二个是用于显示图像的uiView,第三个是grid.But现在问题是我无法一个接一个地渲染所有三个视图。它彼此重叠。请帮助我做错的地方。我必须为我的应用程序创建相同的设计。

http://a2.mzstatic.com/us/r30/Purple69/v4/59/10/fd/5910fd12-0721-9473-8001-8d3d16b22bdb/screen322x572.jpeg

还要查看我的代码。

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

    static NSString *identifier = @"Cell";

    UICollectionViewCell *cell;
    if (indexPath.section==0)

    {

        HeaderCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HeaderCollectionViewCell" forIndexPath:indexPath];
        cell.frame=CGRectMake(0, 0, self.view.frame.size.width,200);
        cell.backgroundColor=[UIColor redColor] ;

        return cell;
    }

    else if(indexPath.section==1)

    {

        HeaderCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HeaderCollectionViewCell" forIndexPath:indexPath];
        cell.frame=CGRectMake(0, 0, self.view.frame.size.width,200);
        cell.backgroundColor=[UIColor orangeColor];

        return cell;

    }

    else if(indexPath.section==2)

    {

        cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
    }



    //   UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100];
    // recipeImageView.image = [UIImage imageNamed:[recipeImages objectAtIndex:indexPath.row]];
    cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"photo-frame.png"]];

    // Configure the cell
    return cell;

}

1 个答案:

答案 0 :(得分:0)

如果你想要那个设计,你可能需要改变一些事情。

我首先要忘记UICollectionViewController业务。只需设置一个常规的UIViewController并在其中粘贴一个UICollectionView。这是代码:

    UICollectionViewFlowLayout *flow = [UICollectionViewFlowLayout new];
    flow.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0);
    flow.minimumLineSpacing = 0.0f;
    flow.minimumInteritemSpacing = 0.0f;
    flow.scrollDirection = UICollectionViewScrollDirectionVertical;

    cv = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 40, w, h-40) collectionViewLayout:flow];
    cv.delegate = self
    cv.dataSource = self;
    cv.scrollEnabled = true;
    cv.bounces = true;
    cv.showsVerticalScrollIndicator = false;
    cv.backgroundColor = [UIColor clearColor];
    [cv registerClass:[customCell class] forCellWithReuseIdentifier:@"customCell"];
    [self.view addSubview:cv];

w和h只是屏幕宽度和高度的变量。 您还需要将其添加到头文件中:

<UICollectionViewDataSource, UICollectionViewDelegate>

现在简要想要调用以下方法,如果它没有得到它们,它会抱怨:

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

  if(indexPath.section == 0){ 

    //then return a large cell size e.g.
    return CGSizeMake(320, 200);

  } else if (indexPath.section == 1) { 

    //then return a square grid size, e.g.
    return CGSizeMake(160, 160);

  }

 return CGSizeZero;

}

- (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);
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    if (section == 0) {
        return sectionZeroArray.count;
     } else ...     
}
 - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
    return 3;
}

包括cellForItem方法,它更多地用于显示单元格内的内容,通常连接到数据对象数组。你不能像现在这样设置尺寸。

但是看看你正在尝试做什么重新设计,可能会更好,而不是按部分拆分,以利用uicollectionview的页眉和页脚。

所以你只需要一个部分,然后你将拥有所有网格大小的方形单元格,然后在顶部位置上你有一个collectionview标题,并在其中,粘贴一个UIScrollView启用分页,连接到UIPageControl。

我不知道你想要做什么,在底部的第三部分,但你可以按照与标题视图相同的程序,但你当然希望如此。

如果您已经添加了所有这些方法并且仍然在苦苦挣扎,请发布您的代码。