我有一个使用自动版式配置的UIImageView对象。我创建了约束,以便 View 与其父 View 保持恒定的距离。在视觉格式下,它将像:

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

但我也想保持基础图像的长宽比,因此我已将UIViewContentModeScaleAspectFit分配给contentMode

我以为一切工作都很好,直到我设置了相关cornerRadiusCALayer值:
self.imageView.layer.cornerRadius = 7;
self.imageView.layer.maskToBounds = YES;

现在,当调整 ImageView 的大小时,例如由于方向改变,圆角会丢失,具体取决于 View 获得的新大小。原因是cornerRadius适用于UIImageView(下面的破折号),但是由于基础图像也已调整大小以尊重contentMode(下面的星号的框),因此不再显示圆角:
--------------------------
|       **********       |
|       *        *       |
|       *        *       |
|       *        *       |
|       **********       |
--------------------------

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

最佳答案

就像@ jacob-k所说的那样,您应该将其子类layoutSubviews添加到您的单元格中,但是要添加,您应该首先调用layoutIfNeeded

例子:

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

如果您不首先调用layoutIfNeeded,那么它将应用所有更改而没有您设置的约束。

关于ios - 如何将自动布局约束与UIView的contentMode属性结合使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18946621/

10-08 21:05