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

前端之家收集整理的这篇文章主要介绍了ios – 如何将Auto Layout约束与UIView的contentMode属性相结合前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个配置了自动布局的UI ImageView对象.我创建了约束,使视图与其超级视图保持不变的距离.在视觉格式下,就像:
@"V:|-[imageView]-|"
@"H:|-[imageView]-|"

但是我也想保留底层图像的宽高比,所以我已经将UIViewContentModeScaleAspectFit分配给contentMode.

我认为一切都很好,直到我设置了相关CALayer的cornerRadius值:

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

现在当图像视图被调整大小时,例如由于方向改变,取决于视图获取的新尺寸,圆角会丢失.原因是cornerRadius适用于UIImageView(下面的破折号框),但是由于底层映像也被调整大小以符合contentMode(下面的星号中的框架),所以圆角不再可见:

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

有办法防止这种行为吗?

解决方法

喜欢@ jacob-k表示,你应该添加到你的单元格子类layoutSubviews中,只是为了添加你应该首先调用layoutIfNeeded.

例:

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

如果您不会首先调用layoutIfNeeded,那么它将应用所有更改,而无需设置限制.

猜你在找的iOS相关文章