我有一个UIImageView,其内容模式Aspect Fit的大小为220x155。我正在以不同的分辨率动态插入不同的图像,但都大于UIImageView的大小。当内容模式设置为Aspect Fit时,图像将按比例缩放以适合UIImageView。
我的问题是,如果例如UIImageView中的图像缩放到220x100,我希望UIImageView也从155到100的高度缩小,以避免我的元素之间的空间。
我该怎么做?
答案 0 :(得分:2)
我写了这个方法,一旦加载图像就给我一个图像视图的框架。 所以,对我的要求与你的情况相同:
1)具有宽高比适合内容模式的图像视图 2)获取图像的确切帧(这样可以重新定位图像视图)
希望这会有所帮助:
- (CGRect) getFrameOfImage:(AsyncImageView *) imgView
{
if(!imgView.loaded)
return CGRectZero;
CGSize imgSize = imgView.image.size;
CGSize frameSize = imgView.frame.size;
CGRect resultFrame;
if(imgSize.width < frameSize.width && imgSize.height < frameSize.height)
{
resultFrame.size = imgSize;
}
else
{
float widthRatio = imgSize.width / frameSize.width;
float heightRatio = imgSize.height / frameSize.height;
float maxRatio = MAX (widthRatio , heightRatio);
NSLog(@"widthRatio = %.2f , heightRatio = %.2f , maxRatio = %.2f" , widthRatio , heightRatio , maxRatio);
resultFrame.size = CGSizeMake(imgSize.width / maxRatio, imgSize.height / maxRatio);
}
resultFrame.origin = CGPointMake(imgView.center.x - resultFrame.size.width/2 , imgView.center.y - resultFrame.size.height/2);
return resultFrame;
}
我在这里使用AsyncImageView
,但它与UIImageView
的效果一样好。要记住的重要一点是在加载图像后调用此方法。
干杯!
答案 1 :(得分:1)
非常简单,你只需要获得图像的实际尺寸,这可以通过
来完成UIImage *image = [UIImage imageName:@""];
然后你只需要设置框架 喜欢: -
imageView.frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height);
希望这会对你有所帮助。
答案 2 :(得分:0)
将imageview的图像设置为新图像(并因此缩放)后,您可以在imageview(imageview.image.size.height)内获取图像的高度,并相应地设置imageview的高度(帧)。