ios - create - uiimageview set image swift
Swift UIImageView Aspecto estirado (4)
UIImageView representa incorrectamente el tamaño de una imagen. Usando Ajuste de aspecto de escala, si el UIImageView es un cuadrado, la imagen es la relación de aspecto correcta con transparencia en las áreas que la imagen no 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
El UIImageView necesita tocar los bordes y tener espacio transparente en la parte superior e inferior de la pantalla y la imagen en el interior debe mantener su relación original en lugar de estirarse más. Adjunto dos imágenes de cómo está renderizando la imagen dentro de UIImageView.
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 que de lo que describes que necesitas UIViewContentMode.ScaleAspectFill
UIViewContentModeScaleAspectFill
La opción de escalar el contenido para completar el tamaño de la vista. Parte del contenido puede recortarse para llenar los límites de la vista.
Estaba teniendo el mismo problema, y lo que lo solucionó fue asegurarse de configurar la imagen de imageView después de configurar el modo de contenido. es decir:
self.imageView.contentMode = UIViewContentMode.ScaleAspectFit
self.imageView.image = imageChosen
Aclamaciones
Swift 3 versión de tu código:
imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight, .flexibleBottomMargin, .flexibleRightMargin, .flexibleLeftMargin, .flexibleTopMargin]
imageView.contentMode = .scaleAspectFit // OR .scaleAspectFill
imageView.clipsToBounds = true
Agregué una máscara de aumento al UIImageView y ahora muestra las proporciones 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 estira con AVCaptureSession sessionPreset = AVCaptureSessionPresetPhoto ya que estaba usando una imagen tomada a través de la cámara del teléfono.