错误的UICollectionViewCell大小

时间:2013-08-14 09:07:30

标签: ios objective-c uicollectionview uicollectionviewcell

我想更改我的UICollectionViewCell的大小

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

enter image description here

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

- (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;
}

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

enter image description here

如果我在Interface Builder中设置大小

enter image description here

在模拟器中一切都很好

enter image description here

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

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

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

2 个答案:

答案 0 :(得分:0)

您的视图控制器是UICollectionViewDelegateFlowLayout吗? 否则sizeForItemAtIndexPath不会被调用。 也许在NSLog内插入一个sizeForItemAtIndexPath来查看它是否被调用。

答案 1 :(得分:0)

我发现了自己的错误。 在awakeFromNib我设置了子视图的高度,但是在

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

忘记了子视图的更新框架