Как объединить ограничения Auto Layout со свойством contentMode в UIView
У меня есть UIImageView
Объект настроен с помощью Auto Layout. Я создал ограничения, чтобы вид оставался на постоянном расстоянии от своего суперпредставления. В визуальном формате это будет выглядеть так:
@"V:|-[imageView]-|"
@"H:|-[imageView]-|"
Но я также хотел бы сохранить соотношение сторон основного изображения, поэтому я назначил UIViewContentModeScaleAspectFit
в contentMode
,
Я думал, что все работает хорошо, пока я не установил cornerRadius
стоимость ассоциированного CALayer
:
self.imageView.layer.cornerRadius = 7;
self.imageView.layer.maskToBounds = YES;
Теперь, когда размер изображения изменяется, например, из-за изменения ориентации, закругленные углы теряются в зависимости от нового размера, который получает вид. Причина в том, что cornerRadius
относится к UIImageView
(рамка в тире ниже), но так как базовое изображение также изменено в соответствии с contentMode
(рамка в звездочках ниже), закругленные углы больше не видны:
--------------------------
| ********** |
| * * |
| * * |
| * * |
| ********** |
--------------------------
Есть ли способ предотвратить такое поведение?
2 ответа
Как сказал @jacob-k, вы должны добавить в свой подкласс ячейки layoutSubviews
, но просто чтобы добавить вам нужно позвонить layoutIfNeeded
первый.
Пример:
- (void)layoutSubviews
{
[super layoutSubviews];
[self layoutIfNeeded];
imageView.layer.cornerRadius = imageView.frame.size.width / 2;
}
Если ты не будешь звонить layoutIfNeeded
Сначала применяются все изменения без установленных ограничений.
Одним из быстрых способов сделать это может быть создание подкласса UIImageView и установка углового радиуса в layoutSubviews
,