objective create ios objective-c swift uiimageview

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.