14

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

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

但我也想保持底层图像的纵横比,所以我分配UIViewContentModeScaleAspectFitcontentMode.

cornerRadius在我设置关联的值之前,我认为一切正常CALayer

self.imageView.layer.cornerRadius = 7;
self.imageView.layer.maskToBounds = YES;

现在,当调整图像视图的大小时,例如由于方向的变化,圆角会丢失,具体取决于视图获得的新大小。原因是这cornerRadius适用于UIImageView(下面的虚线框),但由于基础图像也被调整大小以尊重contentMode(下面的星号框),圆角不再可见:

--------------------------
|       **********       |
|       *        *       |
|       *        *       |
|       *        *       |
|       **********       |
--------------------------

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

4

2 回答 2

27

就像@jacob-k 说的那样,你应该添加到你的单元子类layoutSubviews中,但只是为了添加你应该layoutIfNeeded先调用。

例子:

- (void)layoutSubviews
{
  [super layoutSubviews];
  [self layoutIfNeeded];
  imageView.layer.cornerRadius = imageView.frame.size.width / 2;
}

如果您不layoutIfNeeded先打电话,那么它会应用所有更改而无需设置约束。

于 2014-05-23T20:27:16.067 回答
0

一种快速的方法是继承 UIImageView 并将角半径设置为layoutSubviews.

于 2013-11-26T16:48:43.173 回答