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 AspectImageView 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

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