我有同样的问题。当原始图像大小(宽度和/或高度)大于保存它的 UIImageView 并且使用 Aspect Fit 调整图像大小以适合 UIImageView 时,就会发生这种情况。
在这里,图像宽度大于 UIImageView 的大小,因此 Aspect Fit 会调整图像大小,保持原始纵横比。如果您读取图像大小(通过手表或断点或其他方式),您将看到图像大小为(例如)600(h)x 800(w)(3:4 比例)。 UIImageView 宽度为(例如)320(w),因此显示的图像缩放为 240(h) x 320(w)(保持 3:4 的比例)。但是图像宽度仍然是 600 x 800,并且由于对 UIImageView 高度没有限制,因此 UIImageView 大小为 600 x 320 ->它将 UIImageView 高度设置为原始图像高度(600),因为它可以。
我的解决方案是这样的:(Swift 3)
在 Main.storyboard 中的 UIImageView 中添加高度约束,并通过 Outlet 链接:
@IBOutlet weak var displayimage: UIImageView!
@IBOutlet weak var displayimageHeightConstraint: NSLayoutConstraint!
然后测试 UIImageView 是否比它持有的图像小(宽度)。如果是这样,设置高度约束,使 UIImageView 的高宽比与图像纵横比相同:
if displayimage.frame.size.width < (displayimage.image?.size.width)! {
displayimageHeightConstraint.constant = displayimage.frame.size.width / (displayimage.image?.size.width)! * (displayimage.image?.size.height)!
}
由于UIImageView高度受限且宽度设置为原始图像宽度的调整大小问题,如果图像两侧存在空白,也可以进行互补操作。
@IBOutlet weak var displayimageWidthConstraint: NSLayoutConstraint!
if displayimage.frame.size.height < (displayimage.image?.size.height)! {
displayimageWidthConstraint.constant = displayimage.frame.size.height / (displayimage.image?.size.height)! * (displayimage.image?.size.height)!
}