Как остановить растяжение изображения в UIImageView? - PullRequest
65 голосов
/ 12 августа 2011

У меня есть UIImageView, где я установил размер кадра x = 0, y = 0, width = 404, height = 712. В моем проекте мне нужно динамически изменить изображение в UIImageView.

Я использую этот код для изменения изображения:

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

Проблема в том, что когда размер *.png меньше размера кадра UIImageView, изображение растягивается. Я не хочу растягиваться. Есть ли способ сделать это?

Ответы [ 10 ]

135 голосов
/ 12 августа 2011

Вы можете использовать

self.imageView.contentMode = UIViewContentModeScaleAspectFit;

Swift 3:

imageView.contentMode = .scaleAspectFit

Или UIViewContentModeCenter / .center, или любой из других режимов, описанных в документации UIView .

11 голосов
/ 21 ноября 2014

Настройка clipsToBounds в сочетании с UIViewContentModeScaleAspectFit contentMode - вот что помогло мне. Надеюсь, это кому-нибудь поможет!

imageView.clipsToBounds = YES;
imageView.contentMode = UIViewContentModeScaleAspectFit;
5 голосов
/ 12 августа 2011

Используйте свойство contentMode. Вы, вероятно, хотите либо UIViewContentModeScaleAspectFit, либо UIViewContentModeCenter.

4 голосов
/ 11 августа 2016

Вы должны установить CGSize в качестве ширины и высоты изображения, чтобы изображение не растягивалось и располагалось в середине изображения.

- (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;
}
4 голосов
/ 07 июля 2013

Измените режим UIImage с 'scale to fill' на 'Center' в конструкторе интерфейса.Убедитесь, что ваше изображение соответствует нужному размеру.

enter image description here

3 голосов
/ 25 ноября 2016

Обновление для Swift 3:

imageView.contentMode = .scaleAspectFit
2 голосов
/ 25 июня 2015

Как использовать оригинальный размер изображения - без растяжения

  • Просто измените режим UIImage с scale to fill на Aspect Fit в конструкторе интерфейса.

enter image description here

2 голосов
/ 12 августа 2011

Изменить contentMode, например ::

imageView.contentMode = UIViewContentModeScaleAspectFit;
1 голос
/ 06 мая 2016

Используйте это для UIImageView

imageView.contentMode = UIViewContentModeScaleAspectFill;

Вы не получите никакого пространства и с сохранением масштаба. Однако некоторая часть изображения будет обрезана.

Если вы используете следующее:

imageView.contentMode = UIViewContentModeScaleAspectFit;

Там будет некоторое пустое пространство, но масштаб сохранится.

0 голосов
/ 10 сентября 2015

все еще растягивается, когда изображение больше, чем 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
...