UIImageView:将大小更改为图像大小?

15

我有一个内容模式为Aspect Fit,大小为220x155的UIImageView。我正在动态插入不同分辨率的图像,但都大于UIImageView的大小。由于内容模式设置为Aspect Fit,图像会按比例缩放以适应UIImageView

我的问题是,例如如果UIImageView中的图像缩放为220x100,我希望UIImageView的高度也从155缩小到100,以避免我的元素之间出现空白。

我该怎么做?


我有一个相同的问题,图片被设置在中心,但是在上下两侧有空白。我该如何解决它?请帮帮我。 - Hiren
4个回答

28

如果我理解正确,那么应该是这样获取图像大小:

UIImage * img = [UIImage imageNamed:@"someImage.png"];
CGSize imgSize = img.size;

计算基于宽度的缩放比例

float ratio=yourImageView.frame.size.width/imgSize.width;

检查缩放后的高度(使用相同的比例以保持长宽比)

float scaledHeight=imgSize.height*ratio;
if(scaledHeight < yourImageView.frame.size.height)
{
   //update height of your imageView frame with scaledHeight
}

20

根据Michael的答案,这是一个完整的方法:

+ (CGSize)makeSize:(CGSize)originalSize fitInSize:(CGSize)boxSize
{
    float widthScale = 0;
    float heightScale = 0;

    widthScale = boxSize.width/originalSize.width;
    heightScale = boxSize.height/originalSize.height;

    float scale = MIN(widthScale, heightScale);

    CGSize newSize = CGSizeMake(originalSize.width * scale, originalSize.height * scale);

    return newSize;
}

3

针对Steven Stefanik的回答进行修改: 当originalSize为{0, 0}时,此方法会出现问题。也许可以考虑以下更改:

-(CGSize)makeSize:(CGSize)originalSize fitInSize:(CGSize)boxSize
{
    if (originalSize.height == 0) {
        originalSize.height = boxSize.height;
    }
    if (originalSize.width == 0) {
        originalSize.width = boxSize.width;
    }

    float widthScale = 0;
    float heightScale = 0;

    widthScale = boxSize.width/originalSize.width;
    heightScale = boxSize.height/originalSize.height;

    float scale = MIN(widthScale, heightScale);

    CGSize newSize = CGSizeMake(originalSize.width * scale, originalSize.height * scale);

    return newSize;
}

0
最后编辑:
看来我误解了问题。
要获取实际大小,您可以尝试:
CGSize imageSize = img.size;
CGSize viewSize = imageView.frame.size;
CGSize actualSize;

if (imageSize.width > imageSize.height) {
    actualSize.width = imageSize.width > viewSize.width ? viewSize.width : imageSize.width;

    actualSize.height = imageSize.height * actualSize.width / imageSize.width;
}
else {
    actualSize.height = imageSize.height > viewSize.height ? viewSize.height : imageSize.height;

    actualSize.width = imageSize.width * actualSize.height / imageSize.height;
}

好的,那不起作用。假设我的图像是440x200。当这个图像被插入到我的ImageView中时,它的大小会被改变为220x100以适应UIImageView。您的代码将设置UIImageView的高度为200,而我想知道UIImageView缩放图像后的图像高度。 - dhrm
你可以始终检查高度,并且仅在图像高度小于当前图像的最大高度时应用此更改,然后才能应用这种更改。 - Ignacio Inglese
抱歉,但我不确定您是否理解我的问题。您的代码会将UIImageView的大小更改为我的图像的大小--这不是我想要的。我希望我的图像适合我的220x115框中。但是当图像的比例不像我的220x115框的比例时,有时它比高更宽,这会在UIImageView的顶部和底部留下白色空间。为了避免这种情况,我希望将UIImageView的高度缩小到其已经缩小图像的高度。 - dhrm
抱歉,最后我做了。似乎imageView或其中的图像都没有反映出当前使用的比例因子。您需要通过检查图像大小与视图大小来自行找出它。 - Ignacio Inglese

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接