[英]Swift UIImageView Stretched Aspect
UIImageView 错误地呈现图像的大小。 使用 Scale Aspect Fit,如果 UIImageView 是正方形,则图像是正确的纵横比,图像未填充的区域具有透明度。
//Image is Square & Correct Size
var imageView = UIImageView(frame: CGRectMake(0, 50, 320, 320))
imageView.clipsToBounds = true
imageView.contentMode = UIViewContentMode.ScaleAspectFit
//Image is Rectangle & Incorrect Size
var imageView = UIImageView(frame: CGRectMake(0, 50, 320, 450))
imageView.clipsToBounds = true
imageView.contentMode = UIViewContentMode.ScaleAspectFit
UIImageView 需要触摸边缘并在屏幕的顶部和底部有透明空间,并且里面的图像需要保持其原始比例而不是拉伸得更高。 我附上了两张关于 UIImageView 内部图像渲染方式的图像。
我向 UIImageView 添加了一个自动调整大小的掩码,它现在显示正确的比例。
imageView.autoresizingMask = UIViewAutoresizing.FlexibleBottomMargin | UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleRightMargin | UIViewAutoresizing.FlexibleLeftMargin | UIViewAutoresizing.FlexibleTopMargin | UIViewAutoresizing.FlexibleWidth
imageView.contentMode = UIViewContentMode.ScaleAspectFit
这个答案对我有帮助: 捕获的照片使用 AVCaptureSession sessionPreset = AVCaptureSessionPresetPhoto 拉伸,因为我使用的是通过手机相机拍摄的图像。
我遇到了同样的问题,对我来说修复它的是确保在设置内容模式后设置 imageView 图像。 IE:
self.imageView.contentMode = UIViewContentMode.ScaleAspectFit
self.imageView.image = imageChosen
干杯
Swift 3版本的代码:
imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight, .flexibleBottomMargin, .flexibleRightMargin, .flexibleLeftMargin, .flexibleTopMargin]
imageView.contentMode = .scaleAspectFit // OR .scaleAspectFill
imageView.clipsToBounds = true
这是UIViewContentMode.ScaleAspectFit
的预期行为。 从文档:
UIViewContentModeScaleAspectFit
通过保持纵横比来缩放内容以适应视图大小的选项。 视图边界的任何剩余区域都是透明的。
从你的描述看来,你需要UIViewContentMode.ScaleAspectFill
UIViewContentModeScaleAspectFill
缩放内容以填充视图大小的选项。 内容的某些部分可能会被裁剪以填充视图的边界。
这里有一个很好的解决方案:通过olearyj234 。
它对我帮助很大。 我建议看看。 此外,这是他在 swift 4 和 Xcode 9.2 中的代码:
class ScaledHeightImageView: UIImageView {
override var intrinsicContentSize: CGSize {
if let myImage = self.image {
let myImageWidth = myImage.size.width
let myImageHeight = myImage.size.height
let myViewWidth = self.frame.size.width
let ratio = myViewWidth/myImageWidth
let scaledHeight = myImageHeight * ratio
return CGSize(width: myViewWidth, height: scaledHeight)
}
return CGSize(width: -1.0, height: -1.0)
}
}
斯威夫特 5
您可以像这样为UIImageView应用UIView.ContentMode.scaleAspectFit :
let logoImage:UIImage = UIImage(named: "my_logo")!
let logoImageView = UIImageView(image: logoImage)
logoImageView.contentMode = UIView.ContentMode.scaleAspectFit
return logoImageView
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.