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

Posted

技术标签:

【中文标题】UIImageView:将大小更改为图像大小?【英文标题】:UIImageView: Change size to image size? 【发布时间】:2012-01-02 14:01:37 【问题描述】:

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

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

我该怎么做?

【问题讨论】:

我有同样的问题,图像设置在中心,但在上下两侧都有空间。我该如何解决?请帮帮我 【参考方案1】:

如果我没听错的话,应该是这样的:get image size by:

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

【讨论】:

对我帮助很大。谢谢【参考方案2】:

根据迈克尔的回答,这里有一个完整的方法

+ (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;

【讨论】:

【参考方案4】:

最后编辑:

似乎我误解了这个问题。

要获得实际尺寸,您可以尝试:

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 缩放图像后图像的高度。 您始终可以检查高度,并且仅在图像高度小于图像当前的最大高度时才应用此高度,然后才应用这种更改。 抱歉,我不确定您是否理解我的问题。您的代码会将 UIImageView 的大小更改为我的图像大小——这不是我想要的。我希望我的图像适合我的 220x115 盒子。但是当图像的比例不像我的 220x115 框的比例时,有时会比更高的更宽,这会在 UIImageView 的顶部和底部产生空白。为避免这种情况,我想将 UIImageView 的高度缩小到将图像缩小到的高度。 对不起,我终于做到了。似乎 imageView 或其中的图像都没有反映当前使用的比例因子。您必须通过检查图像大小与视图大小来自己找出它。

以上是关于UIImageView:将大小更改为图像大小?的主要内容,如果未能解决你的问题,请参考以下文章

将故事板 UIImageView 更改为具有背景颜色的自己的类

自定义 UI 视图更改帧大小

UIImageView 在加载更大的图像后调整大小

自动调整 UIImageView 的大小以适合底层图像

UIImageView 显示图像时如何防止 UIToolbar 调整大小?

没有图像的自动布局 UIImageView