0

我想改变我的 UICollectionViewCell 的大小

在 Interface Builder 中,我设置了自定义大小

在此处输入图像描述

在我的代码中,我想更改单元格的大小

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(274, 274);
}

将来我需要不同大小的单元格

在我的牢房里,我有下一个方法

- (void)awakeFromNib
{
    backImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.width, self.height / 1.32)];
    [self addSubview:backImageView];
    lineImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, backImageView.height, self.width, self.height / 9.67)];
    [self addSubview:lineImageView];
    nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(28, lineImageView.originY + 5, self.width - 28, 15)];
    nameLabel.font = [UIFont fontWithName:FontStyleBold size:14];
    [self addSubview:nameLabel];
    descriptLabel = [[UILabel alloc] initWithFrame:CGRectMake(nameLabel.originX, lineImageView.originY + lineImageView.height + 3, nameLabel.width - nameLabel.originX, 25)];
    descriptLabel.numberOfLines = 2;
    descriptLabel.font = [UIFont fontWithName:FontStyle size:8];
    [self addSubview:descriptLabel];
    self.backgroundColor = [UIColor whiteColor];
    self.layer.masksToBounds = NO;
    self.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(-1, 2.0, self.width + 2, self.height + 2) cornerRadius:0.f].CGPath;
    self.layer.shadowColor = [[UIColor blackColor] CGColor];
    self.layer.shadowOpacity = .4f;
    self.layer.shadowRadius = 2.0f;
}

在模拟器中我有下一个不好的结果

在此处输入图像描述

如果我在 Interface Builder 中设置大小

在此处输入图像描述

在模拟器中一切都好

在此处输入图像描述

我认为下一个方法必须改变单元格的大小,但它改变了项目的大小

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(274, 274);
}

那么如何在没有 Interface Builder 帮助的情况下以编程方式更改 UICollectionViewCell 的大小呢?

4

2 回答 2

0

你的视图控制器是 aUICollectionViewDelegateFlowLayout吗?否则sizeForItemAtIndexPath不会被调用。也许插入一个NSLog内部sizeForItemAtIndexPath以查看它是否被调用。

于 2013-08-14T10:41:29.820 回答
0

我发现我的错误。在awakeFromNib我设置子视图的高度但在

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

忘记子视图的更新帧

于 2013-08-14T13:46:45.643 回答