基于这个堆栈溢出答案 https://stackoverflow.com/a/5249707/2792531,我们可以得到 a 的大小UIImage
通过访问其size
财产。
因此,从这里开始,最简单的方法是使用自动布局。
设置故事板或 xib,并在其上显示图像视图。继续为您的图像视图提供明确的宽度和高度约束。现在,填写图像视图周围的其余约束。但是请记住,当我们将不同的图像放入图像视图中时,图像视图上的显式宽度/高度将会发生变化,因此我们的其他自动布局约束必须牢记这一点。
Now, add an IBOutlet
for our explicit height and width constraints. This can be done the same way we add an outlet for any other UI element. Just Ctrl+drag from the constraint in IB to the source file.
现在我们有这样的东西:
@property (nonatomic, weak) NSLayoutConstraint *imageHeight;
@property (nonatomic, weak) NSLayoutConstraint *imageWidth;
现在,每次我们更改图像视图的图像时,我们都会更新constant
这些限制的一部分:
self.imageHeight.constant = newImage.size.height;
self.imageWidth.constant = newImage.size.width;
现在,使用上述方法意味着我们的图像视图将始终与我们的图像具有完全相同的尺寸。这可能意味着它会延伸到屏幕边界之外或只填充屏幕的一小部分。
另一种方法是使用纵横比约束。再次,首先为图像视图提供宽高比约束,将其高度与其宽度相关联。现在,为视图设置其余的自动布局约束。也许您希望将左上角固定到特定位置。
当您执行此操作时,您可能还需要为图像视图的宽度和高度设置一些小于或等于的约束。这些约束将确保无论图像的大小或形状如何,图像视图都将小于您指定的大小(因此保留在屏幕上)。
再次为您的宽高比约束添加一个出口。每次更改图像视图的图像时,我们都会修改它:
@property (nonatomic, weak) NSLayoutConstraint *imageRatio;
现在,代替constant
属性(我们希望将其保留为零),我们将修改multiplier
比率约束的性质。宽度是在顶部还是底部完全取决于约束的连接方式,因此可能需要一些尝试和错误。但要点是,我们想要这样的东西:
self.imageRatio.multiplier = newImage.size.height / newImage.size.width;
(同样,您可能必须在此处翻转高度/宽度。)