Установить фрейм UIImageView в initWithCoder

Я пытаюсь установить размер кадра UIImageView внутри подкласса UICollectionCell, но это не работает. Я использую раскадровку.

В коде все работает, кроме последней строки, касающейся imageView. Если я положил код в drawRect, он работает нормально.

- (id)initWithCoder:(NSCoder *)decoder {
if ((self = [super initWithCoder:decoder]))
{
    self.backgroundColor = [UIColor colorWithWhite:0.85f alpha:1.0f];

    self.layer.borderColor = [UIColor lightGrayColor].CGColor;
    self.layer.borderWidth = 1.0f;

    self.layer.cornerRadius = 8.0f;
    self.layer.masksToBounds = NO;
    self.layer.shadowColor = [UIColor blackColor].CGColor;
    self.layer.shadowRadius = 3.0f;
    self.layer.shadowOffset = CGSizeMake(0.0f, 2.0f);
    self.layer.shadowOpacity = 0.5f;

    self.imageView.frame = CGRectMake(10, 10, 50, 50);
}

2 ответа

Это потому, что ваш imageView (я полагаю, что это и IBOutlet) еще не инициализирован, он все еще ноль. Помните, что некоторые переменные / свойства инициализируются внутри метода init. Установите точку останова, и вы увидите. Попробуйте установить значения imageView в другом месте, например, drawRect (как вы предлагаете) или awakeFromNib.

Вид изображения перемещается позже другим объектом? Попробуйте переместить этот код в layoutSubviews

Добавьте этот метод:

- (void) layoutSubviews
{
    [super layoutSubviews];

    self.imageView.frame = CGRectMake(10, 10, 50, 50);
}
Другие вопросы по тегам