如何在保持 1:1 比率的同时设置 UIImageView 的最大宽度和高度?

How can I set max width and height on UIImageView while maintaining 1:1 ratio?

我正在尝试在情节提要中执行此操作,但似乎无法弄清楚。我有一个 QR 码(方形 UIImageView)居中(垂直和水平)在另一个 UIView 中,我想根据 phone 大小扩展一点,但我不希望它超过 150x150,否则它看起来很奇怪。这是我试过的。非常感谢任何帮助。

我用了很久

(UIImage*) scaleImage:(UIImage*)image toSize:(CGSize)newSize {
CGSize scaledSize = newSize;
float scaleFactor = 1.0;
if( image.size.width > image.size.height ) {
    scaleFactor = image.size.width / image.size.height;
    scaledSize.width = newSize.width;
    scaledSize.height = newSize.height / scaleFactor;
}
else {
    scaleFactor = image.size.height / image.size.width;
    scaledSize.height = newSize.height;
    scaledSize.width = newSize.width / scaleFactor;
}

UIGraphicsBeginImageContextWithOptions( scaledSize, NO, 0.0 );
CGRect scaledImageRect = CGRectMake( 0.0, 0.0, scaledSize.width, 
scaledSize.height );
[image drawInRect:scaledImageRect];
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();    

return scaledImage;
}

您想:

  • 在父视图中居中
  • 保持1:1纵横比
  • 保持小于或等于 150x150

所以,居中是显而易见的(是的,自动布局)。 1:1比也容易。诀窍是:

将所有 4 个边固定到 >= 0 的父视图边。

设置Width <= 150

然后 ---

设置另一个Width约束条件,这次Width Equals: 150但是Priority小于1000。我用了 999 并且它完成了工作。

当超级视图小于 150(在任一方向)时,用 >= 0 固定边和 top/bottom 使其缩小。