Hauteur = Largeur sur une UIView de façon dynamique via XIB

JérémyJérémy Membre
septembre 2016 modifié dans API UIKit #1

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.  ::)


Réponses

  • Pour changer ton titre tu édites ton message avec l'éditeur complet...

    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




  • Sinon pour ton problème tu peux dire que tu veux que la hauteur soit égale à  la largeur... Tout simplement.




     


    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 ?


     




    Ou l'aspect ratio à  1:1




     


    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 ?



  • 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 ?


  • LexxisLexxis Membre
    septembre 2016 modifié #8

    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. 


  • Joanna CarterJoanna Carter Membre, Modérateur

    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. 


  • Alf1996Alf1996 Membre
    septembre 2016 modifié #13


    D'accord, mais il n'a pas de réelles possibilités de dire "hauteur = largeur" explicitement. Si ?




     


     


    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...


Connectez-vous ou Inscrivez-vous pour répondre.