2011-08-12 8 views
58

Tengo un UIImageView donde establecí el tamaño del marco en x = 0, y = 0, width = 404, height = 712. En mi proyecto, necesito cambiar la imagen en UIImageView dinámicamente.¿Cómo detener el estiramiento de una imagen dentro de UIImageView?

Estoy usando este código para cambiar la imagen:

self.imageView.image = [UIImage imageNamed:@"setting-image.png"]; 

El problema es, cuando el tamaño de la imagen *.png es más pequeño que el tamaño UIImageView marco, los tramos de imagen. No quiero que se estire. ¿Hay alguna forma de hacer eso?

Respuesta

120

Puede utilizar

self.imageView.contentMode = UIViewContentModeScaleAspectFit; 

Swift 3:

imageView.contentMode = .scaleAspectFit 

O UIViewContentModeCenter/.center, o cualquiera de los otros modos descritos en the UIView documentation.

+0

gracias por su respuesta, pero usando aspecto modo de encajar que la posición de alguna imagen muy por debajo, así que cambio en el modo de arriba a la izquierda, gracias por lo que sugiere para usarlo, finalmente, tengo la respuesta :) –

5

Utilice la propiedad contentMode. Probablemente desee UIViewContentModeScaleAspectFit o UIViewContentModeCenter.

2

Cambiar el contentMode, por ejemplo .:

imageView.contentMode = UIViewContentModeScaleAspectFit; 
4

cambio de modo de la UIImage de 'escala para llenar' a 'Centro' dentro del constructor de interfaces. Asegúrese de que su imagen sea del tamaño exacto que necesita.

enter image description here

10

clipsToBounds de ajuste en combinación con UIViewContentModeScaleAspectFit contentMode fue lo que hizo el truco para mí. Espero que ayude a alguien!

imageView.clipsToBounds = YES; 
imageView.contentMode = UIViewContentModeScaleAspectFit; 
+0

"clipsToBounds" marcó y "contentMode" como "AspectFill" en el guión gráfico funcionó para mí en Xcode 8 – KingChintz

1

Cómo utilizar el tamaño original de la imagen - sin ningún estiramiento

  • Sólo cambia el modo de la UIImage de scale to fill a Aspect Fit dentro del constructor de interfaces.

enter image description here

0

todavía estirarse cuando la imagen es más grande que imageivew

rápida

let qCodeImage = UIImage(named: "qcode-placeholder.png")!  
    let qCodeImageView = UIImageView(frame: CGRectMake(0, 0, CGRectGetWidth(cardView.frame)-30, CGRectGetWidth(cardView.frame)-30)) 
    qCodeImageView.image = qCodeImage 
    qCodeImageView.clipsToBounds = true 
    qCodeImageView.contentMode = UIViewContentMode.ScaleToFill 
    qCodeImageView.center = cardView.center 
1

Uso esto para su UIImageView

imageView.contentMode = UIViewContentModeScaleAspectFill; 

Usted no recibirá cualquier spa ce y con escala preservada. Sin embargo, se recortará una parte de la imagen.

Si utiliza la siguiente:

imageView.contentMode = UIViewContentModeScaleAspectFit; 

Habrá un poco de espacio vacío, pero se conserva escala.

3

Tiene que establecer CGSize como ancho de imagen y alto para que la imagen no se estire y se organizará en el medio de la vista de la imagen.

- (UIImage *)imageWithImage:(UIImage *)image scaledToFillSize:(CGSize)size 
{ 
    CGFloat scale = MAX(size.width/image.size.width, size.height/image.size.height); 
    CGFloat width = image.size.width * scale; 
    CGFloat height = image.size.height * scale; 
    CGRect imageRect = CGRectMake((size.width - width)/2.0f, 
            (size.height - height)/2.0f, 
            width, 
            height); 

    UIGraphicsBeginImageContextWithOptions(size, NO, 0); 
    [image drawInRect:imageRect]; 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return newImage; 
} 
3

Actualización para Swift 3:

imageView.contentMode = .scaleAspectFit 
Cuestiones relacionadas