Swift UIImageView Aspecto Estirado

UIImageView muestra el tamaño de una image de forma incorrecta. Usando Scale Aspect Fit Fit, si UIImageView es un cuadrado, la image es la relación de aspecto correcta con transparencia en las áreas en que la image no se llena.

//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 debe tocar los bordes y tener un espacio transparente en la parte superior e inferior de la pantalla, y la image interna debe mantener su relación original en lugar de estirarse más alto. Adjunto dos imágenes de cómo se está renderizando la image dentro de UIImageView.

ImageView con aspecto correctoImageView con aspecto incorrecto

Agregué una máscara de autorrealización al UIImageView y ahora muestra las relaciones correctas.

 imageView.autoresizingMask = UIViewAutoresizing.FlexibleBottomMargin | UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleRightMargin | UIViewAutoresizing.FlexibleLeftMargin | UIViewAutoresizing.FlexibleTopMargin | UIViewAutoresizing.FlexibleWidth imageView.contentMode = UIViewContentMode.ScaleAspectFit 

Esta respuesta me ayudó: la foto capturada se estiró con AVCaptureSession sessionPreset = AVCaptureSessionPresetPhoto ya que estaba usando una image que se tomó a través de la camera del teléfono.

Estaba teniendo el mismo problema, y ​​lo que me solucionó era asegurarme de configurar la image de la image después de configurar el modo de contenido. es decir:

  self.imageView.contentMode = UIViewContentMode.ScaleAspectFit self.imageView.image = imageChosen 

Aclamaciones

Versión Swift 3 de su código:

 imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight, .flexibleBottomMargin, .flexibleRightMargin, .flexibleLeftMargin, .flexibleTopMargin] imageView.contentMode = .scaleAspectFit // OR .scaleAspectFill imageView.clipsToBounds = true 

Ese es el comportamiento previsto para UIViewContentMode.ScaleAspectFit . De los documentos:

UIViewContentModeScaleAspectFit

La opción de escalar el contenido para que se ajuste al tamaño de la vista manteniendo la relación de aspecto. Cualquier área restante de los límites de la vista es transparente.

Parece de lo que usted describe que necesita UIViewContentMode.ScaleAspectFill

UIViewContentModeScaleAspectFill

La opción para escalar el contenido para completar el tamaño de la vista. Se puede recortar una parte del contenido para completar los límites de la vista.