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 更改为具有背景颜色的自己的类