如何阻止图像在 UIImageView 中拉伸?

Posted

技术标签:

【中文标题】如何阻止图像在 UIImageView 中拉伸?【英文标题】:How to stop an image from stretching within a UIImageView? 【发布时间】:2011-08-12 04:15:21 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

你可以使用

self.imageView.contentMode = UIViewContentModeScaleAspectFit;

斯威夫特 3:

imageView.contentMode = .scaleAspectFit

UIViewContentModeCenter/.center,或the UIView documentation中描述的任何其他模式。

【讨论】:

谢谢你的回答,但是使用模式宽高比使一些图像的位置太低,所以我把它改成左上角模式,谢谢你建议我使用它,最后,我得到了答案:)【参考方案2】:

将 clipsToBounds 与 UIViewContentModeScaleAspectFit contentMode 结合起来对我有用。希望对某人有所帮助!

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

【讨论】:

"clipsToBounds" 勾选 & "contentMode" as "AspectFill" 在故事板上为我工作在 Xcode 8 中【参考方案3】:

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

【讨论】:

【参考方案4】:

在界面构建器中将 UIImage 的模式从“缩放填充”更改为“中心”。确保您的图片与您需要的尺寸完全一致。

【讨论】:

【参考方案5】:

你必须将 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;

【讨论】:

【参考方案6】:

Swift 3 更新:

imageView.contentMode = .scaleAspectFit

【讨论】:

【参考方案7】:

更改 contentMode,例如:

imageView.contentMode = UIViewContentModeScaleAspectFit;

【讨论】:

【参考方案8】:

如何使用图片的原始尺寸 - 无需任何拉伸

只需在界面生成器中将 UIImage 的模式从 scale to fill 更改为 Aspect Fit

【讨论】:

【参考方案9】:

将此用于您的UIImageView

imageView.contentMode = UIViewContentModeScaleAspectFill;

您不会获得任何空间并且保留比例。但是,图像的某些部分会被剪掉。

如果您使用以下内容:

imageView.contentMode = UIViewContentModeScaleAspectFit;

会有一些空白,但保留比例。

【讨论】:

【参考方案10】:

当图像大于 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

【讨论】:

以上是关于如何阻止图像在 UIImageView 中拉伸?的主要内容,如果未能解决你的问题,请参考以下文章

ios图片拉伸技巧

UIImage 不应在 UIImageView 内拉伸

我的 UIImageView 中的约束有啥问题,为啥我无法在 UIViewController 上拉伸图像?

UIImageView 在边框上拉伸/重复图像并保持其质量

当我使用圆角时,UIImageView 图像正在拉伸。

iOS 一些 UIImageView 被拉伸