如何阻止在UIImageView内拉伸的图像?

我有一个UIImageView ,我已经设置帧大小为x = 0, y = 0, width = 404, height = 712 。 在我的项目中,我需要dynamic地更改UIImageView的图像。

我正在使用此代码来更改图像:

 self.imageView.image = [UIImage imageNamed:@"setting-image.png"]; 

问题是,当*.png图像大小小于UIImageView框架大小时,图像拉伸。 我不想让它伸展。 有没有办法做到这一点?

您可以使用

 self.imageView.contentMode = UIViewContentModeScaleAspectFit; 

Swift 3:

 imageView.contentMode = .scaleAspectFit 

或者UIViewContentModeCenter / .center ,或UIView文档中描述的任何其他模式。

设置clipsToBounds与UIViewContentModeScaleAspectFit contentMode组合是什么对我来说。 希望帮助别人!

 imageView.clipsToBounds = YES; imageView.contentMode = UIViewContentModeScaleAspectFit; 

使用contentMode属性。 您可能需要UIViewContentModeScaleAspectFitUIViewContentModeCenter

在界面生成器中将UIImage的模式从“缩放填充”更改为“中心”。 确保您的图像是您需要的确切大小。

在这里输入图像说明

更改contentMode,例如:

 imageView.contentMode = UIViewContentModeScaleAspectFit; 

Swift 3的更新:

 imageView.contentMode = .scaleAspectFit 

你必须设置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; } 

如何使用原始大小的图像 – 没有任何拉伸

  • 只需将UIImage的模式从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