Contrainte "Largeur égale hauteur" dans Interface Builder


92

Je ne trouve pas de moyen de créer une contrainte «carré», ce qui signifie «largeur égale à hauteur» dans Interface Builder. Je suppose qu'il est possible d'ajouter une telle contrainte par programme. Puis-je faire quelque chose à IB? Peut-être que je ne le vois tout simplement pas? Cela semble trivial, mais je ne le trouve pas.


Je me souviens que Peter Ammon parlait de "Fiez-vous le plus possible à Interface Builder" dans WWDC'12. Quelle ironie.
DemoniacDeath

4
Oui, je pense qu'il manque encore quelques éléments dans la mise en œuvre des contraintes de mise en page. Il semble qu'ils nous ont donné accès à la plupart des paramètres, mais pas au multiplicateur, ce qui serait utile pour beaucoup de choses.
rdelmar

Mais ça va de mieux en mieux! Je veux dire, Auto Layout a été introduit il y a moins de 3 ans et de mon point de vue, le support est vraiment bon de nos jours.
Lukas Kubanek

Réponses:


187

Mettre à jour Xcode 5.1b5

la largeur est égale à la hauteur

Ctrl + clic et glisser depuis une vue et relâcher pendant que le pointeur est sur la vue. Sélectionnez "Rapport hauteur / largeur". 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 car l'éditeur largeur / hauteur n'a pas les champs pour se rapporter à une autre propriété ou définir le rapport:

contrainte de largeur

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];

1
Merci pour la dernière mise à jour. Xcode 5.1 beta 5 vous permet en fait de définir des contraintes de rapport d'aspect dans IB, mais lorsque j'essaie de compiler le projet, j'obtiens l'erreur suivante: Contraintes de rapport d'aspect avec les versions Xcode antérieures à 5.1 . Alors peut-être que nous devons attendre la version 5.1 finale. Pareil pour toi, @Jano?
Lukas Kubanek

Oui, les modifications apportées aux XIB ne sont pas rétrocompatibles. Si vous modifiez avec 5.1, vous ne pouvez pas revenir à des versions inférieures.
Jano

Vous êtes donc capable de compiler le xib? Cela ne fonctionne pas même avec Xcode 5.1 beta 5 pour moi.
Lukas Kubanek

1
@ onmyway133 crée une contrainte entre les deux vues et définit le multiplicateur sur 1: 2.
Jano

3
Dans Xcode 7, ctrl + clic, faites glisser depuis la vue et relâchez par-dessus lui-même, puis sélectionnez Rapport d'aspect
inorganik

1

Veuillez ajouter une nouvelle contrainte, ratio d'aspect à 1: 1 sur l'élément d'interface utilisateur comme dans l'image.

Réglez le rapport hauteur / largeur sur 1: 1


0

Pour commencer, contrôlez le glissement en diagonale du bouton vers lui-même. Un menu contextuel apparaîtra, dans lequel vous pouvez ajouter des contraintes de largeur et de hauteur. Shift + Click sur chacun; une coche apparaîtra pour indiquer que vous avez ajouté la contrainte. (Si vous fermez accidentellement la boîte de dialogue avant d'ajouter les deux, c'est OK, répétez simplement l'étape de glissement et définissez l'autre):

entrez la description de l'image ici

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, assurez-vous donc d'utiliser la même valeur constante dans les deux contraintes pour redimensionner le bouton proportionnellement. Double-cliquez sur la contrainte et entrez une valeur plus petite dans son champ constant:

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.