Je n'arrive pas à trouver un moyen de créer une contrainte "carrée", c'est-à-dire "largeur égale hauteur", dans Interface Builder. Je suppose qu'il est possible d'ajouter une telle contrainte de manière programmatique. Y a-t-il quelque chose que je puisse faire dans IB ? Peut-être que je ne le vois pas ? Cela semble trivial, mais je n'arrive pas à le trouver.
Réponses
Trop de publicités?Mise à jour de Xcode 5.1b5
Ctrl+clic et glisser à partir d'une vue et relâcher pendant que le pointeur est sur la vue. Sélectionnez "Aspect Ratio". Cela créera une contrainte où le premier et le deuxième élément sont la vue.
Avant Xcode 5.1
Vous ne pouvez pas le faire car l'éditeur de largeur/hauteur ne dispose pas des champs permettant d'établir une relation avec une autre propriété ou de définir le rapport :
Par conséquent, vous ne pouvez pas exprimer le code suivant dans Interface Builder :
CGFloat ratio = 1.0;
NSLayoutConstraint *constraint = [NSLayoutConstraint
constraintWithItem:myView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:myView
attribute:NSLayoutAttributeHeight
multiplier:ratio
constant:0];
constraint.priority = 1000;
[myView.superview addConstraint:constraint];
Pour commencer, faites glisser le contrôle en diagonale du bouton vers lui-même. Un menu contextuel apparaît, dans lequel vous pouvez ajouter des contraintes de largeur et de hauteur. Shift+Cliquez sur chacune d'elles ; une coche apparaîtra pour indiquer que vous avez ajouté la contrainte. (Si vous quittez accidentellement la boîte de dialogue avant d'avoir ajouté les deux, ce n'est pas grave, il suffit de répéter l'étape du glisser-déposer et de définir l'autre) :
Lorsqu'elles sont ajoutées pour la première fois, ces contraintes prennent la largeur et la hauteur actuelles du bouton. Vous devrez donc ajuster chaque contrainte pour lui donner une valeur plus appropriée. Nous devrons le faire une par une, bien que notre image soit carrée. Veillez donc à utiliser la même valeur constante dans les deux contraintes pour redimensionner le bouton de manière proportionnelle. Double-cliquez sur la contrainte et saisissez une valeur plus petite dans son champ constant :