我使用CollectionViewController
首先渲染3个自定义视图,第二个是用于显示图像的uiView,第三个是grid.But现在问题是我无法一个接一个地渲染所有三个视图。它彼此重叠。请帮助我做错的地方。我必须为我的应用程序创建相同的设计。
还要查看我的代码。
-(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;
}
答案 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。
我不知道你想要做什么,在底部的第三部分,但你可以按照与标题视图相同的程序,但你当然希望如此。
如果您已经添加了所有这些方法并且仍然在苦苦挣扎,请发布您的代码。