J'utilise la disposition automatique et cela me rend fou. J'ai fait tout mon possible pour empêcher UIImageView de s'étirer partout. Je ne sais pas pourquoi ça fait ça. J'ai essayé d'utiliser des contraintes, de résoudre des problèmes de mise en page automatique. Pour l'instant, la seule solution consistait à transformer la mise en page automatique elle-même.
Quelqu'un pourrait-il me dire pourquoi xcode ignore complètement mes contraintes? Je m'attendrais à ce que l'UIImage reste en 320x320 quand je l'ai explicitement défini comme ça, mais noooooooo ....
Je veux publier des images, mais le site ne me le permet pas, et je voudrais ajouter du code à cette question afin qu'elle soit plus spécifique, mais il n'y a littéralement pas de code du tout. Je viens de faire glisser "UIImageView" depuis le storyboard, je l'ai fait petit, j'ai défini les contraintes telles quelles, et il ignore simplement mon code.
Vous voudrez vous assurer que votre UIImageView
est réglé pour couper les limites. Sinon, l'image sortira de la vue et semblera ne pas s'étirer correctement (même si en réalité c'est le cas).
Dans le générateur d'interface, assurez-vous que la case Clip Subviews est cochée.
Si vous n'utilisez pas le générateur d'interface, le code suivant fera la même chose:
yourImageView.clipsToBounds = YES;
Avec la mise en page automatique, les valeurs de l'inspecteur de taille sont à peu près ignorées.
Vous pouvez vous attendre à ce que si un nombre est tapé dans les cases de l'inspecteur de taille, Xcode crée automatiquement des contraintes pour refléter ce que vous avez tapé, mais ce n'est pas le cas. Vous devez créer vous-même des contraintes "Pin" pour la hauteur et la largeur de votre UIImageView
.
Cliquez sur le bouton "Ajouter 2 contraintes"
Lorsque vous avez terminé, vous devriez pouvoir voir vos contraintes dans l'inspecteur de taille sur le côté droit de l'écran (les cases violettes)
Mon problème était avec les ContentHuggingPriority
et ContentCompressionResistancePriority
.
Le premier contrôle à quel point il est important de garder la vue en "serrant" l'image (en restant près d'elle et sans l'agrandir) et le second contrôle la résistance à la compression de la vue.
Nous utilisons PureLayout , donc le code pour le corriger était:
[NSLayoutConstraint autoSetPriority:ALLayoutPriorityRequired forConstraints:^{
[myImageView autoSetContentCompressionResistancePriorityForAxis:ALAxisHorizontal];
[myImageView autoSetContentHuggingPriorityForAxis:ALAxisHorizontal];
}];
(mon problème était uniquement dans l'axe horizontal)
15 mai 2016: Mise à jour vers la syntaxe PureLayout v3. Si vous utilisez une version <= 2, mettez simplement UIView
au lieu de NSLayoutConstraint
. Merci Rudolf J !
J'ai eu le même problème. J'ai ajouté un UIImageView dans une cellule prototype et j'ai voulu l'aligner à côté du texte mais il a continué d'étirer l'image lorsque j'ai appliqué les contraintes. Dans mon cas, j'ai changé la propriété 'Mode' pour la vue d'image en 'Aspect Fit' et cela a bien fonctionné .
Vous pouvez essayer d'ajouter UIImageView par programme. Appelez ce code dans votre méthode viewDidLoad
ou où vous le souhaitez.
UIImageView *yourImageView = [[UIImageView alloc]initWithFrame:CGRectMake(50.0f, 50.0f, 320.0f, 320.0f)]; // x and y coordinates, width and height of UIImageView
[yourImageView setImage:[UIImage imageNamed:@"your_image.png"]];
[yourImageView setContentMode:UIViewContentModeCenter]; // you can try use another UIViewContentMode
[self.view addSubview:yourImageView];