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

あなたのView ControllerはUICollectionViewDelegateFlowLayoutですか?そうsizeForItemAtIndexPathしないと、呼び出されません。NSLog内部に挿入してsizeForItemAtIndexPath、それがまったく呼び出されるかどうかを確認してください。

于 2013-08-14T10:41:29.820 に答える