web-dev-qa-db-fra.com

Comment empêcher une image de s'étirer dans une UIImageView?

J'ai un UIImageView où j'ai défini la taille du cadre sur x = 0, y = 0, width = 404, height = 712. Dans mon projet, je dois changer l'image dans UIImageView dynamiquement.

J'utilise ce code pour changer l'image:

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

Le problème est que lorsque le *.png la taille de l'image est inférieure à la taille du cadre UIImageView, l'image s'étire. Je ne veux pas qu'il s'étire. Y'a-t'il un quelconque moyen d'y arriver?

65
R. Dewi

Vous pouvez utiliser

self.imageView.contentMode = UIViewContentModeScaleAspectFit;

Swift 3:

imageView.contentMode = .scaleAspectFit

Ou UIViewContentModeCenter/.center, ou l'un des autres modes décrits dans la documentation UIView .

135
jtbandes

La définition de clipsToBounds en combinaison avec UIViewContentModeScaleAspectFit contentMode a été ce qui m'a fait l'affaire. J'espère que cela aide quelqu'un!

imageView.clipsToBounds = YES;
imageView.contentMode = UIViewContentModeScaleAspectFit;
11
Tyler Kidd

Utilisez la propriété contentMode . Vous voulez probablement soit UIViewContentModeScaleAspectFit ou UIViewContentModeCenter.

5
Anomie

Modifiez le mode de UIImage de "échelle à remplir" à "Centre" dans le générateur d'interface. Assurez-vous que votre image a la taille exacte dont vous avez besoin.

enter image description here

4
Declan McKenna

Vous devez définir CGSize comme largeur et hauteur de l'image afin que l'image ne s'étire pas et qu'elle s'organise au milieu de la vue d'image.

- (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;
}
4
Kaushik Movaliya

Mise à jour pour Swift 3:

imageView.contentMode = .scaleAspectFit
3
transistor

Modifiez le ContentMode, par exemple:

imageView.contentMode = UIViewContentModeScaleAspectFit;
2
Nathanial Woolls

Comment utiliser la taille originale de l'image - sans aucun étirement

  • Changez simplement le mode de UIImage de scale to fill à Aspect Fit dans le générateur d'interface.

enter image description here

2
Megaetron

Utilisez ceci pour votre UIImageView

imageView.contentMode = UIViewContentModeScaleAspectFill;

Vous n'obtiendrez aucun espace et avec une échelle préservée. Cependant, une partie de l'image sera tronquée.

Si vous utilisez ce qui suit:

imageView.contentMode = UIViewContentModeScaleAspectFit;

Il y aura un espace vide, mais l'échelle est préservée.

1

étirer toujours lorsque l'image est plus grande que l'image

Swift

    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
0
Daniel Long