如何阻止在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
属性。 您可能需要UIViewContentModeScaleAspectFit
或UIViewContentModeCenter
。
在界面生成器中将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