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


71

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

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

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

问题是,当*.png图像尺寸小于UIImageView帧尺寸时,图像会拉伸。我不希望它伸展。有什么办法吗?

Answers:


141

您可以使用

self.imageView.contentMode = UIViewContentModeScaleAspectFit;

斯威夫特3:

imageView.contentMode = .scaleAspectFit

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


谢谢您的回答,但是使用模式纵横比使图像的位置也位于下方,因此我将其更改为左上角模式,感谢您建议我使用它,最后,我得到了答案:)
R. Dewi

12

设置clipsToBounds与UIViewContentModeScaleAspectFit contentMode结合使用对我来说是成功的窍门。希望能对某人有所帮助!

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

“clipsToBounds”勾选上和故事板“contentMode”为“AspectFill”在Xcode 8为我工作
Achintya阿肖克

5

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



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;
}



2

如何使用图像的原始尺寸-不进行任何拉伸

  • 只需在界面生成器中将UIImage的Mode从更改为scale to fill即可Aspect Fit

在此处输入图片说明


1

用它来做你的 UIImageView

imageView.contentMode = UIViewContentModeScaleAspectFill;

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

如果使用以下命令:

imageView.contentMode = UIViewContentModeScaleAspectFit;

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


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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.