我有UIImageView
我将帧大小设置为x = 0, y = 0, width = 404, height = 712
。
在我的项目中,我需要动态更改UIImageView
中的图像。
我正在使用此代码更改图片:
self.imageView.image = [UIImage imageNamed:@"setting-image.png"];
问题是,当*.png
图片尺寸小于UIImageView
边框尺寸时,图片会拉伸。我不希望它伸展。有没有办法做到这一点?
答案 0 :(得分:133)
您可以使用
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
斯威夫特3:
imageView.contentMode = .scaleAspectFit
或UIViewContentModeCenter
/ .center
或the UIView documentation中描述的任何其他模式。
答案 1 :(得分:11)
设置clipsToBounds与UIViewContentModeScaleAspectFit一起使用contentMode是我的诀窍。希望能帮助别人!
imageView.clipsToBounds = YES;
imageView.contentMode = UIViewContentModeScaleAspectFit;
答案 2 :(得分:5)
使用contentMode
属性。您可能需要UIViewContentModeScaleAspectFit
或UIViewContentModeCenter
。
答案 3 :(得分:4)
在界面构建器中将UIImage的模式从“scale to fill”更改为“Center”。确保您的图片符合您的确切尺寸。
答案 4 :(得分:4)
你必须将CGSize设置为你的图像宽度和高度,这样图像就不会拉伸,它将排列在imageview的中间。
- (UIImage *)imageWithImage:(UIImage *)image scaledToFillSize:(CGSize)size
{
CGFloat scale = MAX(size.width/image.size.width, size.height/image.size.height);
CGFloat width = image.size.width * scale;
CGFloat height = image.size.height * scale;
CGRect imageRect = CGRectMake((size.width - width)/2.0f,
(size.height - height)/2.0f,
width,
height);
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
[image drawInRect:imageRect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
答案 5 :(得分:3)
Swift 3更新:
imageView.contentMode = .scaleAspectFit
答案 6 :(得分:2)
更改contentMode,例如:
imageView.contentMode = UIViewContentModeScaleAspectFit;
答案 7 :(得分:2)
如何使用图片的原始尺寸 - 没有任何拉伸
Aspect Fit
更改为{{1}}。
答案 8 :(得分:1)
将此用于UIImageView
imageView.contentMode = UIViewContentModeScaleAspectFill;
您无法获得任何空间并且保留了比例。但是,图像的某些部分将被剪掉。
如果您使用以下内容:
imageView.contentMode = UIViewContentModeScaleAspectFit;
会有一些空白空间,但会保留比例。