我有一个UIImageView
我已将帧大小设置为x = 0, y = 0, width = 404, height = 712
. 在我的项目中,我需要UIImageView
动态更改图像。
我正在使用此代码更改图像:
self.imageView.image = [UIImage imageNamed:@"setting-image.png"];
问题是,当*.png
图像尺寸小于UIImageView
帧尺寸时,图像会拉伸。我不想让它伸展。有没有办法做到这一点?
我有一个UIImageView
我已将帧大小设置为x = 0, y = 0, width = 404, height = 712
. 在我的项目中,我需要UIImageView
动态更改图像。
我正在使用此代码更改图像:
self.imageView.image = [UIImage imageNamed:@"setting-image.png"];
问题是,当*.png
图像尺寸小于UIImageView
帧尺寸时,图像会拉伸。我不想让它伸展。有没有办法做到这一点?
您可以使用
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
斯威夫特 3:
imageView.contentMode = .scaleAspectFit
或UIViewContentModeCenter
/或UIView 文档.center
中描述的任何其他模式。
结合 UIViewContentModeScaleAspectFit contentMode 设置 clipsToBounds 是我的诀窍。希望对某人有所帮助!
imageView.clipsToBounds = YES;
imageView.contentMode = UIViewContentModeScaleAspectFit;
使用该contentMode
物业。您可能想要UIViewContentModeScaleAspectFit
或UIViewContentModeCenter
。
在界面生成器中将 UIImage 的模式从“缩放到填充”更改为“中心”。确保您的图像是您需要的确切尺寸。
你必须将 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;
}
Swift 3 的更新:
imageView.contentMode = .scaleAspectFit
更改 contentMode,例如:
imageView.contentMode = UIViewContentModeScaleAspectFit;
如何使用图像的原始大小- 没有任何拉伸
scale to fill
。Aspect Fit
将此用于您的UIImageView
imageView.contentMode = UIViewContentModeScaleAspectFill;
你不会得到任何空间并保留比例。但是,图像的某些部分将被剪掉。
如果您使用以下内容:
imageView.contentMode = UIViewContentModeScaleAspectFit;
会有一些空白空间,但保留了比例。
当图像大于 imageivew 时仍然会拉伸
迅速
let qCodeImage = UIImage(named: "qcode-placeholder.png")!
let qCodeImageView = UIImageView(frame: CGRectMake(0, 0, CGRectGetWidth(cardView.frame)-30, CGRectGetWidth(cardView.frame)-30))
qCodeImageView.image = qCodeImage
qCodeImageView.clipsToBounds = true
qCodeImageView.contentMode = UIViewContentMode.ScaleToFill
qCodeImageView.center = cardView.center