如何根据 UIImage 大小调整 UIImageView 的大小并适合屏幕的宽度

How to resize a UIImageView based on UIImage size and fit the screen's width

我有这个代码片段:

func resizeImageViewToImageSize(_ imageView:UIImageView) {
        let widthRatio = imageView.bounds.size.width / imageView.image!.size.width
        let heightRatio = imageView.bounds.size.height / imageView.image!.size.height
        let scale = min(widthRatio, heightRatio)
        let imageWidth = scale * imageView.image!.size.width
        let imageHeight = scale * imageView.image!.size.height
        print("\(imageWidth) - \(imageHeight)")

        imageView.frame = CGRect(x: 0,
        y: 70,
        width: imageWidth,
        height: imageHeight)
        imageView.center.x = view.center.x
 }

我在 viewDidLoad() 中调用它来调整我的 originalImageView UIImageView:

resizeImageViewToImageSize(originalImageView)

它成功地调整了我的 UIImageView 的大小,但是如果我从相机拍摄照片(例如 iPhone7+),我的 imageWidth 和 imageHeight 是:226.4 - 283.0,这使我的 UIImageView在屏幕中央非常小,如下图:

我想做的是让我的originalImageView宽度变大,并相应地保持其比例,就像下面的模型一样,可以吗?

我认为当 imageView.image!.size.width 的值大于 imageView.bounds.size.width 或高度值时会出现问题。

这将导致 widthRatioheightRatio 的值小于 1。

并且当您的 scale 小于 1 并乘以您的 imageWidthimageHeight 时,您最终会得到比原来更小的 UIImageView。

我猜从像 iPhone7 这样“清晰”的相机拍摄的图像的分辨率会很高。

你必须检查imageView.bounds.widthimageView.image!.size.width哪个值更大,然后根据条件取倒数。

 func resizeImageViewToImageSize(_ imageView:UIImageView) {
    

    let maxWidth = view.frame.size.width
    let maxHeight = view.frame.size.height

        var widthRatio = imageView.bounds.size.width / imageView.image!.size.width
    
        if widthRatio < 1 {
            widthRatio = 1 / widthRatio
        }
    
        var heightRatio = imageView.bounds.size.height / imageView.image!.size.height

        if heightRatio < 1 {
            heightRatio = 1 / widthRatio
        }
    
        let scale = min(widthRatio, heightRatio)
    
        let maxWidthRatio = maxWidth / imageView.bounds.size.width
        let maxHeightRatio = maxHeight / imageView.bounds.size.height
        let maxScale = min(maxWidthRatio, maxHeightRatio)

        let properScale = min(scale, maxScale)

        let imageWidth = properScale * imageView.image!.size.width
        let imageHeight = properScale * imageView.image!.size.height
        print("\(imageWidth) - \(imageHeight)")

        imageView.frame = CGRect(x: 0,
        y: 70,
        width: imageWidth,
        height: imageHeight)
        imageView.center.x = view.center.x
 }