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

时间:2011-08-12 04:15:21

标签: ios cocoa-touch uiimageview uiimage stretching

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

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

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

问题是,当*.png图片尺寸小于UIImageView边框尺寸时,图片会拉伸。我不希望它伸展。有没有办法做到这一点?

9 个答案:

答案 0 :(得分:133)

您可以使用

self.imageView.contentMode = UIViewContentModeScaleAspectFit;

斯威夫特3:

imageView.contentMode = .scaleAspectFit

UIViewContentModeCenter / .centerthe UIView documentation中描述的任何其他模式。

答案 1 :(得分:11)

设置clipsToBounds与UIViewContentModeScaleAspectFit一起使用contentMode是我的诀窍。希望能帮助别人!

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

答案 2 :(得分:5)

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

答案 3 :(得分:4)

在界面构建器中将UIImage的模式从“scale to fill”更改为“Center”。确保您的图片符合您的确切尺寸。

enter image description here

答案 4 :(得分: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;
}

答案 5 :(得分:3)

Swift 3更新:

imageView.contentMode = .scaleAspectFit

答案 6 :(得分:2)

更改contentMode,例如:

imageView.contentMode = UIViewContentModeScaleAspectFit;

答案 7 :(得分:2)

如何使用图片的原始尺寸 - 没有任何拉伸

  • 只需在界面构建器中将UIImage的模式从Aspect Fit更改为{{1}}。

enter image description here

答案 8 :(得分:1)

将此用于UIImageView

imageView.contentMode = UIViewContentModeScaleAspectFill;

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

如果您使用以下内容:

imageView.contentMode = UIViewContentModeScaleAspectFit;

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