Swift UIImageView, растянутый аспект
UIImageView неправильно отображает размер изображения. Использование Scale Aspect Fit, если UIImageView является квадратом, изображение соответствует правильному соотношению сторон с прозрачностью в областях, которые изображение не заполняет.
//Image is Square & Correct Size
var imageView = UIImageView(frame: CGRectMake(0, 50, 320, 320))
imageView.clipsToBounds = true
imageView.contentMode = UIViewContentMode.ScaleAspectFit
//Image is Rectangle & Incorrect Size
var imageView = UIImageView(frame: CGRectMake(0, 50, 320, 450))
imageView.clipsToBounds = true
imageView.contentMode = UIViewContentMode.ScaleAspectFit
UIImageView должен касаться краев и иметь прозрачное пространство в верхней и нижней части экрана, а изображение внутри должно сохранять исходное соотношение, а не растягиваться выше. Я приложил два изображения того, как изображение внутри UIImageView выполняет рендеринг.
![ImageView with correct Aspect]()
![ImageView with wrong Aspect]()
Ответы
Ответ 1
Я добавил маску авторезистирования в UIImageView и теперь отображает правильные отношения.
imageView.autoresizingMask = UIViewAutoresizing.FlexibleBottomMargin | UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleRightMargin | UIViewAutoresizing.FlexibleLeftMargin | UIViewAutoresizing.FlexibleTopMargin | UIViewAutoresizing.FlexibleWidth
imageView.contentMode = UIViewContentMode.ScaleAspectFit
Этот ответ помог мне: Захваченное фото растягивается с помощью AVCaptureSession sessionPreset = AVCaptureSessionPresetPhoto, когда я использовал изображение, которое было снято с помощью камеры телефона.
Ответ 2
Swift 3 версия вашего кода:
imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight, .flexibleBottomMargin, .flexibleRightMargin, .flexibleLeftMargin, .flexibleTopMargin]
imageView.contentMode = .scaleAspectFit // OR .scaleAspectFill
imageView.clipsToBounds = true
Ответ 3
У меня была одна и та же проблема, и я исправил ее для того, чтобы установить образ imageView после того, как был установлен режим содержимого. т.е.:
self.imageView.contentMode = UIViewContentMode.ScaleAspectFit
self.imageView.image = imageChosen
Приветствия
Ответ 4
Это предполагаемое поведение для UIViewContentMode.ScaleAspectFit
. Из документов:
UIViewContentModeScaleAspectFit
Возможность масштабирования контента в соответствии с размер представления, поддерживая соотношение сторон. Остальные область видимых границ прозрачна.
Похоже, что вы описываете, что вам нужно UIViewContentMode.ScaleAspectFill
UIViewContentModeScaleAspectFill
Возможность масштабирования содержимого для заполните размер представления. Некоторая часть содержимого может быть обрезана для заполнения границ представлений.