71

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

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

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

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

4

10 回答 10

141

您可以使用

self.imageView.contentMode = UIViewContentModeScaleAspectFit;

斯威夫特 3:

imageView.contentMode = .scaleAspectFit

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

于 2011-08-12T04:19:16.670 回答
12

结合 UIViewContentModeScaleAspectFit contentMode 设置 clipsToBounds 是我的诀窍。希望对某人有所帮助!

imageView.clipsToBounds = YES;
imageView.contentMode = UIViewContentModeScaleAspectFit;
于 2014-11-21T15:49:55.663 回答
6

使用该contentMode物业。您可能想要UIViewContentModeScaleAspectFitUIViewContentModeCenter

于 2011-08-12T04:19:38.817 回答
4

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

在此处输入图像描述

于 2013-07-07T14:25:01.897 回答
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;
}
于 2016-08-11T09:36:04.387 回答
3

Swift 3 的更新:

imageView.contentMode = .scaleAspectFit
于 2016-11-25T20:41:23.140 回答
2

更改 contentMode,例如:

imageView.contentMode = UIViewContentModeScaleAspectFit;
于 2011-08-12T04:20:34.377 回答
2

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

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

在此处输入图像描述

于 2015-06-24T22:45:33.800 回答
1

将此用于您的UIImageView

imageView.contentMode = UIViewContentModeScaleAspectFill;

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

如果您使用以下内容:

imageView.contentMode = UIViewContentModeScaleAspectFit;

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

于 2016-05-06T12:29:39.873 回答
0

当图像大于 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
于 2015-09-10T09:01:30.760 回答