在UICollectionView中创建Quilt布局

时间:2013-04-19 06:35:03

标签: iphone ios objective-c ios6 uicollectionview

enter image description here

我需要这种类型的UICuollectionView.Each单元格有一个图像和一个标签。单元格的高度和宽度取决于该标签的文本。

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

   CollectionViewCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"kCellID"  forIndexPath:indexPath];
if(cell == nil){
    cell = [[[NSBundle mainBundle] loadNibNamed:@"CollectionViewCell" owner:self options:nil] lastObject];
}
cell.backgroundColor = [UIColor redColor];
cell.image.image = [UIImage imageNamed:[self.arrPhotos objectAtIndex:indexPath.row]];
[cell.image setFrame:CGRectMake(cell.image.frame.origin.x, cell.image.frame.origin.y, cell.image.frame.size.width,100)];
float f = [self getHeightCalculateForTheText:[arrText objectAtIndex:indexPath.row]  andwidth:96];
[cell.label setFrame:CGRectMake(0,100,96, f)];
cell.label.text = [arrText objectAtIndex:indexPath.row];
[cell setFrame:CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.width+f-20+10)];
return cell;
}

- (CGSize) blockSizeForItemAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.row >= self.arrPhotos.count)
    NSLog(@"Asking for index paths of non-existant cells!! %d from %d cells", indexPath.row, self.arrPhotos.count);
float f = [self getHeightCalculateForTheText:[arrText objectAtIndex:indexPath.row]  andwidth:96];

if (f > 0 && f< 30)
    return CGSizeMake(1, 2);
else if (f > 30 && f< 60)
    return CGSizeMake(1, 3);
else if (f > 60 && f< 90)
    return CGSizeMake(1, 4);
else if (f > 90 && f< 120)
    return CGSizeMake(1, 5);
else if (f > 120 && f< 150)
    return CGSizeMake(1, 6);
else if(f > 150 && f< 180)
    return CGSizeMake(1, 7);

return CGSizeMake(1,1);
}

但我的细胞受到挤压。enter image description here

你可以告诉我这是什么问题吗?

1 个答案:

答案 0 :(得分:0)

也许您在此行中输入了width height

[cell setFrame:CGRectMake(cell.frame.origin.x, 
                          cell.frame.origin.y, 
                          cell.frame.size.width, 
                          cell.frame.size.width+f-20+10)];