2015-01-26 2 views
2

Я хотел бы разместить круговое UIImageView с масонством. Таким образом, я создал UIImageView, как это:Autolayout (с масонством) с угловым радиусом

[self.imageView mas_makeConstraints:^(MASConstraintMaker *make) { 
    make.centerX.equalTo(self.mas_centerX); 
    make.top.equalTo(self.mas_top).with.offset([[UIView ub_padding] floatValue]); 
    make.bottom.equalTo(self.descriptionLabel.mas_top).with.offset(-[[UIView ub_padding] floatValue]); 
    make.height.equalTo(self.descriptionLabel.mas_height).priorityHigh(); 
    make.width.equalTo(self.imageView.mas_height); 
}]; 

Затем я создал ограничения для ImageView

[self.imageView mas_makeConstraints:^(MASConstraintMaker *make) { 
    make.centerX.equalTo(self.mas_centerX); 
    make.top.equalTo(self.mas_top).with.offset([[UIView ub_padding] floatValue]); 
    make.bottom.equalTo(self.descriptionLabel.mas_top).with.offset(-[[UIView ub_padding] floatValue]); 
    make.height.equalTo(self.descriptionLabel.mas_height).priorityHigh(); 
    make.width.equalTo(self.imageView.mas_height); 
}]; 

тогда я попытался бы эти ограничения применяются, а затем установите радиус угла.

[self setNeedsUpdateConstraints]; 
    [self updateConstraintsIfNeeded]; 
    [self layoutIfNeeded]; 
    self.imageView.layer.cornerRadius = self.imageView.frame.size.width/2; 

Но кадр self.imageView еще не установлен (но это получить позже заложено, когда я его просмотр на тренажере). Какой метод вызывается при выполнении макета?

+0

Вы ищете метод '- (void) viewDidLayoutSubviews'? Он вызывается каждый раз, когда контроллер просмотра выполняет макет. – Armin

+0

Я не знаю масонство. Вот почему я не пишу это как ответ. Очевидно, у вас есть доступ к объекту UIImageView и его слою. Вы устанавливаете 'self.imageView.layer.maskksToBounds = YES;'? –

+0

Я заметил это, но я надеялся, что у UIView будет такой метод ... – babaloo

ответ

1

Настройте радиус угла после вызова super... в layoutSubviews методы вашего взгляда в:

-(void)layoutSubviews{ 
    [super layoutSubviews]; 
    [self applyCornerRadii]; 
} 

Это обеспечивает расположение произошло перед тем, как применить угловые радиусы (в моем случае 50% от высоты/ширины, чтобы создать круг), и он вычисляется правильно.

Смежные вопросы