我有一个UIImageView
对象配置了自动布局。我创建了约束,以便视图与其superview保持恒定的距离。在视觉格式中它将是:
@"V:|-[imageView]-|"
@"H:|-[imageView]-|"
但我还想保留基础图片的宽高比,因此我已将UIViewContentModeScaleAspectFit
分配给contentMode
。
我认为一切正常,直到我设置相关cornerRadius
的{{1}}值:
CALayer
现在,当调整图像视图的大小时,例如由于方向的改变,圆角会丢失,具体取决于视图获得的新大小。原因是self.imageView.layer.cornerRadius = 7;
self.imageView.layer.maskToBounds = YES;
适用于cornerRadius
(下面的破折号中的框架),但由于底层图像也调整为尊重UIImageView
(下面的星号中的框架),因此圆角不是再见了:
contentMode
有没有办法防止这种行为?
答案 0 :(得分:27)
就像@ jacob-k所说,你应该添加到你的单元子类layoutSubviews
,但只是要添加你应该先调用layoutIfNeeded
。
示例:
- (void)layoutSubviews
{
[super layoutSubviews];
[self layoutIfNeeded];
imageView.layer.cornerRadius = imageView.frame.size.width / 2;
}
如果您不先调用layoutIfNeeded
,则会应用所有更改而不设置约束。
答案 1 :(得分:0)
一种快速的方法可以是继承UIImageView并在layoutSubviews
中设置角半径。