Ответ 1
Ты можешь использовать
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
Свифт 3:
imageView.contentMode = .scaleAspectFit
Или UIViewContentModeCenter
/.center
, или любой другой режим, описанный в документации UIView.
У меня есть UIImageView
, где я установил размер кадра x = 0, y = 0, width = 404, height = 712
.
В моем проекте мне нужно изменить изображение в UIImageView
динамически.
Я использую этот код для изменения изображения:
self.imageView.image = [UIImage imageNamed:@"setting-image.png"];
Проблема заключается в том, что размер *.png
меньше размера кадра UIImageView
, изображение растягивается. Я не хочу, чтобы он растягивался. Есть ли способ сделать это?
Ты можешь использовать
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
Свифт 3:
imageView.contentMode = .scaleAspectFit
Или UIViewContentModeCenter
/.center
, или любой другой режим, описанный в документации UIView.
Настройка клипов в сочетании с UIViewContentModeScaleAspectFit contentMode была для меня трюком. Надеюсь, что кто-то поможет!
imageView.clipsToBounds = YES;
imageView.contentMode = UIViewContentModeScaleAspectFit;
Используйте свойство contentMode
. Вероятно, вы хотите либо UIViewContentModeScaleAspectFit
, либо UIViewContentModeCenter
.
Измените режим UIImage с "scale to fill" на "Center" в построителе интерфейса. Убедитесь, что ваше изображение - точный размер, который вам нужен.
Вы должны установить 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;
}
Обновление для Swift 3:
imageView.contentMode = .scaleAspectFit
Измените contentMode, например:
imageView.contentMode = UIViewContentModeScaleAspectFit;
Как использовать оригинальный размер изображения - без растягивания
scale to fill
на Aspect Fit
внутри построителя интерфейса.
Используйте это для UIImageView
imageView.contentMode = UIViewContentModeScaleAspectFill;
Вы не получите никакого пространства и сохраните масштаб. Однако часть изображения будет отсечена.
Если вы используете следующее:
imageView.contentMode = UIViewContentModeScaleAspectFit;
Будет пустое пространство, но масштаб сохраняется.
все еще растягивается, когда изображение больше, чем изображение
быстры
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