Contraintes : les mettez-vous partout ?
Bonjour !
J'ai une question d'ordre général. Quand vous désignez une vue dans IB, avec plein de sous-vues, etc. mettez-vous des contraintes pour tous les éléments (width, height, x, y pour toutes les sous-vues) ?
Mettez-vous des contraintes QUE dans le cas où la vue va être resizée ?
Merci !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Non, c'est déjà assez chiant comme ça.
Personnellement, je repasse même parfois à l'autoresizing pour gagner du temps.
Je trouve ça très bien je vois rien de chiant là dedans une fois qu'on s'est fait au concept (le but n'est pas de retranscrire notre ancienne façon de faire via des frames & co vers les contraintes, mais de juste penser autrement) et au moins c'est flexible.
J'aurais pas du tout dit ça du temps de Xcode 4 ou 5 mais avec Xcode 6 par contre ça devient naturel et ça force aussi à penser ce que l'o' veux exactement (est-ce que l'on veux que telle vue fasse 100 de haut ou est-ce que ce qu'on veut vraiment en fait c'est qu'elle s'arrête 30px avant telle autre vue, etc)
C'est une toute autre façon d'appréhender les choses mais une fois qu'on a basculé notre cerveau dans ce nouveau mode de conception la question ne se pose même plus : contraintes systématiquement.
Contraintes aussi mais pas avec les cellules, j'ai du mal à créer des cellules complexes avec des tailles dynamiques en autolayout du coup je préfère faire tout à la main. Peut être que ça se fait facilement pour les cellules aussi mais pour l'instant c'est pas mon cas
Je comprends que ce n'est pas un problème quand on a un graphiste qui a dessiné l'écran au pixel près, mais c'en est un quand l'IHM évolue souvent.
Par ailleurs, j'ai parfois de grosses difficultés à faire faire à Xcode ce que je veux, alors que j'y arriverais facilement en créant la contrainte par le code.
Je passe sur les warnings pondus par Xcode quand on utilise un aspect ratio, et que ça se joue à un point près. (non, je n'ai pas envoyé de radar à Apple, mais je suis fatigué de le faire, alors j'assume).
Contrainte tout le temps. Mais on se rend compte qu'on perd beaucoup de temps à les mettres, surtout que je ne trouve pas xcode très ergonomique pour la pose des contraintes.
Quand je veux qu'une vue prend toute la taille de son parent, je doit faire 4 clics dans un sous menu, c'est vite chiant.
Et quand on a plusieurs elements à positionner, c'est un galère à mettre toute les contraintes. Surtout quand on se rend compte qu'on veut déplacer un element à l'intérieur d'un autre, faut refaire toute les contraintes.
Mais en même temps, si on veut que notre appli fonctionne en paysage et en portrait (voir sur plusieurs taille d'écran), c'est quasiment obligatoire si les vues sont complexe.
Moi je le fais en un seul clic : une fois la vue positionnée comme je veux, il me suffit de choisir "Add Missing Constraints".
J'ai même ajouté un raccourci pour ça dans Xcode (car ce truc de "Add Missing Constraints" est dispo via le petit pop-up sur le bouton en bas à droite de IB qui a un petit triangle... mais il est aussi dispo via le menu "Editor" > "Resolve AutoLayout Issues" > "Add Missing Constraints"... auquel tu peux rajouter un raccourci comme n'importe quel article de menu dans Xcode) et du coup je le fais même en un simple raccourci clavier et zéro clics.
J'utilise les contraintes tout le temps en mettant un preview dans différents format d'appareil. Il est vrai que ça doit être plus simple pour ceux qui ont un, ou deux grands écrans.
Cela prend un peu de temps mais cela garantie la gestion correcte de l'affichage dans toutes les tailles de terminaux. Je me sers aussi des priorités afin d'avoir un joli rendu (pas de superpositions) sur grands et petits terminaux
Comme Céroce, j'ai parfois du mal à faire ce que je veux dans les cas qui ne sont pas simples.
Ce que je trouve difficile, c'est de préciser la source des contraintes. Il est également difficile de déterminer à partir de quel moment on va avoir besoin du code.
Au final, il y a en gros deux cas,
-soit votre vue parente détermine la taille de vos vues filles et ce en cascade de vues filles en vues filles. Là ça marche assez bien avec IB.
-soit votre vue parente doit s'adapter à son contenu et là , pour moi c'est encore un peu compliqué à exprimer en contrainte. Surtout si la vue parente est elle-même dans une scrollview ou un popover par exemple.
Contraintes partout ca devrait être obligatoire... Je suis de l'avis d'AliGator sur ce coup... Surtout a force de voir des post sur stack où les réponses n°1 sont une fois sur deux "fait un init with frame"
Il faut suer un peu pour comprendre la psychologie derriere le délire mais maintenant avoir un seul et unique storyboard pour mon appli iPad/iPhone en portrait et en paysage c'est un gain de temps incroyable.
Surtout quand il faut rajouter au dernier moment un/deux/trois boutons t'es bien content quand tout se déplace automatiquement sans avoir à toucher à quoi que ce soit si ce n'est update frames...
Add missing fonctionne pas mal quand il manque une ou deux contraintes par contre j'ai arrêté d'utiliser autolayout qui ne fait vraiment pas le taf correctement.
Autolayout systématiquement également (surtout depuis xc6) via XIB ou via le code aussi... notamment pour les UIScrollView...