UIImageView填充整个UICollectionView单元格

时间:2014-07-26 01:44:20

标签: uiimageview uicollectionview

我有一个显示图像水平布局的UICollectionView。在每张图片下,我都会显示标签。在故事板中,我扩展了单元格的高度,以便标签显示在单元格下方。我还将故事板中UIImageView的高度设置为比单元格小20个。但是,无论我做什么,图像都占据整个单元格,标签显示在图像的顶部。我应该在其他地方设置imageview的大小吗?我发现这个thread我认为会有所帮助,因为它基本上是相同的,但解决方案并没有帮助我。

这是我的代码......

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell"; // string value identifier for cell reuse
    ImageViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
    cell.layer.borderWidth = 1.0;
    cell.layer.borderColor = [UIColor grayColor].CGColor;

    NSString *myPatternString = [self.imageNames objectAtIndex:indexPath.row];
    cell.imageView.image = [self.imagesArray objectAtIndex:indexPath.row];

    cell.imageView.contentMode = UIViewContentModeScaleAspectFill;

    cell.imageView.clipsToBounds = YES;

    CGSize labelSize = CGSizeMake(CellWidth, 20);
    UILabel *testLabel = [[UILabel alloc] initWithFrame:CGRectMake(cell.bounds.size.width/2, cell.bounds.size.height-labelSize.height, cell.bounds.size.width, labelSize.height)];
    testLabel.text = myPatternString;
    [cell.contentView addSubview:testLabel];

    return cell;
}

1 个答案:

答案 0 :(得分:0)

不知道这是否适合你,但我这样做是UIView的子类,它包含两个子视图 - 图像的UIImageView和标签的UILabel。以下是下面这个子类的精髓(不要被底部的圆角所困扰;在某些区域我需要将底部四舍五入,在其他区域我不需要)。我只是将这个子视图添加到单元格的contentView中。不知道它是否对你有所帮助,但它确实存在。顺便说一句,imageView是一个类变量,但您可以将其定义为属性。

- (id)initWithFrame:(CGRect)frame withImage:(UIImage *)img withLabel:(NSString *)lbl roundBottoms:(BOOL)roundBottoms;
    {
    self = [super initWithFrame:frame];
    if (self)
    {
        imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, frame.size.width, frame.size.height-25.0f)];

        if (roundBottoms)
        {
            imageView.layer.cornerRadius = 12;
            imageView.layer.masksToBounds = YES;
        }
        else
        {
            CAShapeLayer * maskLayer = [CAShapeLayer layer];
            maskLayer.path = [UIBezierPath bezierPathWithRoundedRect: imageView.bounds byRoundingCorners: UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii: (CGSize){12.0, 12.}].CGPath;
            imageView.layer.mask = maskLayer;
        }

        [imageView setImage:img];
        imageView.contentMode = UIViewContentModeScaleAspectFill;   // default

        [self addSubview:imageView];

        UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, frame.size.height - 25.0f, frame.size.width, 25.0f)];
        label.text = lbl;
        labelText = lbl;
        label.textAlignment = NSTextAlignmentCenter;
        label.textColor = [UIColor blackColor];

        label.adjustsFontSizeToFitWidth = YES;  
        label.minimumScaleFactor = 0.50f;
        label.backgroundColor = [UIColor clearColor];
        self.tag = imageItem; // 101
        [self addSubview:label];
    }
    return self;
}

我使用的是另一个版本,我根据传入的整体帧高度计算标签的高度。在这一个中,单元格大小是静态的,因此标签高度也可以。