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

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

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

我该怎么做?

【问题讨论】:

  • 我有同样的问题,图像设置在中心,但在上下两侧都有空间。我该如何解决?请帮帮我

标签: ios uiimageview


【解决方案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 或其中的图像都没有反映当前使用的比例因子。您必须通过检查图像大小与视图大小来自己找出它。
      猜你喜欢
      • 1970-01-01
      • 2013-01-16
      • 2013-01-14
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 2021-12-16
      • 1970-01-01
      相关资源
      最近更新 更多