我有一个内容模式为Aspect Fit,大小为220x155的UIImageView
。我正在动态插入不同分辨率的图像,但都大于UIImageView
的大小。由于内容模式设置为Aspect Fit,图像会按比例缩放以适应UIImageView
。
我的问题是,例如如果UIImageView中的图像缩放为220x100,我希望UIImageView的高度也从155缩小到100,以避免我的元素之间出现空白。
我该怎么做?
我有一个内容模式为Aspect Fit,大小为220x155的UIImageView
。我正在动态插入不同分辨率的图像,但都大于UIImageView
的大小。由于内容模式设置为Aspect Fit,图像会按比例缩放以适应UIImageView
。
我的问题是,例如如果UIImageView中的图像缩放为220x100,我希望UIImageView的高度也从155缩小到100,以避免我的元素之间出现空白。
我该怎么做?
如果我理解正确,那么应该是这样获取图像大小:
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
}
根据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;
}
针对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;
}
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;
}