Hauteur = Largeur sur une UIView de façon dynamique via XIB
Bonjour à tous,
Je souhaiterais que la hauteur d'une UIView soit égal à sa largeur sachant que cette dernière n'est pas fixe. Pour faire simple, j'ai positionné une vue sur dans XIB dont la largeur dépend de la largeur de l'écran de l'iPhone, ce que j'aimerais c'est avoir un carré en toute circonstance quelque soit le type d'iPhone.
J'ai cherché dans la liste des contraintes disponibles dans XIB et rien ne m'a sauté aux yeux. Existe t'il un moyen de le faire depuis Interface Builder ? Ou dois je passer par du code ?
Merci pour vos réponses. ::)
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Sinon pour ton problème tu peux dire que tu veux que la hauteur soit égale à la largeur... Tout simplement.
Ou l'aspect ratio à 1:1
C'est une option dispo dans XIB ? Ou tu me dis de faire ça via mon code source ? Si c'est via XIB, comment faut il faire ?
J'ai pas testé de jouer sur le ratio... En gros tu définis un aspect et ta view gardera le même rapport hauteur / largeur lorsque l'une des deux sera modifiée ?
Exact ! C'est un ratio largeur / hauteur.
Depuis IB il est possible de créer une contrainte "Aspect ratio" sur ta vue ("CTRL Click" avec comme source et destination la vue en question).
D'accord, mais il n'a pas de réelles possibilités de dire "hauteur = largeur" explicitement. Si ?
Si tu renseignes la valeur de multiplier dans la contrainte à "1:1" (enfin 1 quoi) ca suffit pas ?
Peut être faut-il aussi ajouter une contrainte sur la largeur ou simplement spécifier sa largeur avec intrinsicContentSize.
Quand tu créées des NSLayoutConstraints, il y a un multiplier. C'est là que joue le ratio.
Si tu veux le faire par code : http://stackoverflow.com/questions/12510705/custom-aspect-ratio-with-autolayout
Merci pour vos réponses ! Je vais utiliser le ratio qui semble correspondre à ce que je cherche.
Il faut Ctrl-drag dans la sous-vue et ajouter une contrainte et, avec les autres contraintes de position, ça ira...
Merci pour vos réponses.
Désolée ma réponse manquait de précision... c'est bien aspect ratio qu'il faut utiliser. Et tu peux voir sur la capture d'écran de Joanna que tu retrouve view.height=view.width multiplié par 1. Pour obtenir ce que tu souhaites, il va falloir que tu définisse cette contrainte, et que dans IB, tu définisses 2 "versions" de ta vue ; en portrait, tu imposes la largeur de ta vue égale à la largeur de l'écran, et en paysage, tu imposes la hauteur de la vue égale à la hauteur de l'écran. Et ainsi, tu auras toujours un carré dont le côté sera de la même taille que la plus petite des valeurs hauteur/largeur de l'écran...