如何将Auto Layout约束与UIView的contentMode属性相结合

时间:2013-09-22 17:21:25

标签: ios autolayout cornerradius contentmode

我有一个UIImageView对象配置了自动布局。我创建了约束,以便视图与其superview保持恒定的距离。在视觉格式中它将是:

@"V:|-[imageView]-|"
@"H:|-[imageView]-|"

但我还想保留基础图片的宽高比,因此我已将UIViewContentModeScaleAspectFit分配给contentMode

我认为一切正常,直到我设置相关cornerRadius的{​​{1}}值:

CALayer

现在,当调整图像视图的大小时,例如由于方向的改变,圆角会丢失,具体取决于视图获得的新大小。原因是self.imageView.layer.cornerRadius = 7; self.imageView.layer.maskToBounds = YES; 适用于cornerRadius(下面的破折号中的框架),但由于底层图像也调整为尊重UIImageView(下面的星号中的框架),因此圆角不是再见了:

contentMode

有没有办法防止这种行为?

2 个答案:

答案 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中设置角半径。