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?
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 .
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;
Utilisez la propriété contentMode
. Vous voulez probablement soit UIViewContentModeScaleAspectFit
ou UIViewContentModeCenter
.
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.
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;
}
Mise à jour pour Swift 3:
imageView.contentMode = .scaleAspectFit
Modifiez le ContentMode, par exemple:
imageView.contentMode = UIViewContentModeScaleAspectFit;
Comment utiliser la taille originale de l'image - sans aucun étirement
scale to fill
à Aspect Fit
dans le générateur d'interface.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.
é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