首页 > 解决方案 > 如何根据 UIImage 大小调整 UIImageView 的大小并适合屏幕的宽度

问题描述

我有这个代码片段:

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()来调整我的originalImageViewUIImageView 的大小:

resizeImageViewToImageSize(originalImageView)

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

在此处输入图像描述

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

在此处输入图像描述

标签: iosswiftcamerauiimageviewuiimage

解决方案


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

这将导致widthRatioheightRatio小于 1。

当你scale的 < 1 并乘以你的imageWidthandimageHeight时,你最终会得到一个比原来更小的 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
        }

        let 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
 }

推荐阅读