UITrait et SizeClass : pas la panacée ;) mais a-t-on mieux ?

Bonjour,

je rebondis sur la question d’Addi posée sur Udemy :
“Bonjour, j’ai un réel problème avec les tailles. Je mets la taille qui convient sur un iPhone 7 mais quand je switch sur l’Iphone 4 c’est plus du tout pareil . que faire ?”

C’est en effet la même classe pour les pitchounes iPhone 4s et les phablettes iPhone 7 Plus (w C h R tous les deux) alors qu’il y a d’évidentes différences de surface utile (960x640 versus 1920x1080 soit plus de 3 fois plus de surface)…

Et donc des rendus très différents avec l’auto-layout : est-on obligé de sniffer le modèle de l’iPhone pour programmer dans le code des adaptations ?
Ou bien peut-on espérer qu’Apple passe un jour les phablettes en wR ou crée une classe intermédiaire ?
Sinon on se retrouve avec ces interfaces très “collé-serré” en 4s ou SE et très/trop aérées en 7 Plus : comme tous les compromis, c’est souvent moins bien pour tout le monde :wink:

Merci d’avance,
Alexis

En effet avec auto layout il n’y a que 2 catégories pour chaque taille : constraint ou regular
Du coup entre les téléphone et les tablettes ça permet de bien différencier mais entre 2 modèles de téléphone ça être insuffisant.
Je ne sais pas si apple a prévu d’ ajouter des nuances mais il ne vaut mieux pas compter dessus.
Si vraiment ca pose problème je pense que le meilleur contournement serait de se baser sur la taille de la vue et non sur le modèle d’iPhone.
La vue globale d’un ViewController est accessible via self.view et ensuite on peut utiliser la propriété bounds pour connaître la largeur et la hauteur d’une vue.

1 « J'aime »

Tu peux régler en partie le problème en utilisant des contraintes relatives aux dimensions de l’écran, pour ajuster la taille de tes objets.

Une contrainte n’est pas juste une relation simple entre deux objets, c’est une formule avec une constante et un multiplicateur. On ne s’en rend pas compte en créant des contraintes avec Storyboard, la constante étant égal à 0 et le multiplicateur à 1. En modifiant le contenu de la constante et du multiplicateur avec Storyboard on peut créer des contraintes personnalisées.

La formule réelle d’une contrainte est :

propriété Pa de l'objet A = (Propriété Pb de l'objet B * multiplicateur) + constante

Exemple : je crée une contrainte sur un objet, disant qu’elle doit être égale à la largeur de l’écran. Puis je l’édite pour replacer le paramètre multiplier 1 par 0.7. La contrainte qui était :

Largeur Objet = largeur Ecran*1 + 0

devient :

Largeur Objet = largeur Ecran*0.7 + 0

donc :

Largeur Objet = 70% de largeur Ecran

Et hop, magique … La largeur s’adapte automatiquement aux changements de device. On peut faire la même chose avec les contraintes de hauteur, et de positionnement (x,y). A la limite, tu peux carrément décrire toute l’interface d’une application uniquement avec des pourcentages de la largeur et de la hauteur de l’écran.

2 « J'aime »