Vous ne décrivez pas l'adaptation à l'échelle; vous décrivez l'aspect en forme. (J'ai édité votre question à cet égard.) La sous-vue devient aussi grande que possible tout en conservant ses proportions et en s'adaptant entièrement à l'intérieur de son parent.
Quoi qu'il en soit, vous pouvez le faire avec la mise en page automatique. Vous pouvez le faire entièrement dans IB à partir de Xcode 5.1. Commençons par quelques vues:
La vue vert clair a un rapport d'aspect de 4: 1. La vue vert foncé a un rapport d'aspect de 1: 4. Je vais configurer des contraintes pour que la vue bleue remplisse la moitié supérieure de l'écran, la vue rose remplisse la moitié inférieure de l'écran et chaque vue verte se développe autant que possible tout en conservant son rapport hauteur / largeur et en s'adaptant à sa récipient.
Tout d'abord, je vais créer des contraintes sur les quatre côtés de la vue bleue. Je vais l'épingler à son voisin le plus proche sur chaque bord, avec une distance de 0. Je m'assure de désactiver les marges:
Notez que je ne mets pas encore à jour le cadre. Je trouve plus facile de laisser de la place entre les vues lors de la configuration des contraintes, et de définir les constantes à 0 (ou autre) à la main.
Ensuite, j'épingle les bords gauche, inférieur et droit de la vue rose à son voisin le plus proche. Je n'ai pas besoin de configurer une contrainte de bord supérieur car son bord supérieur est déjà contraint au bord inférieur de la vue bleue.
J'ai également besoin d'une contrainte d'égale hauteur entre les vues rose et bleue. Cela les fera remplir chacun la moitié de l'écran:
Si je dis à Xcode de mettre à jour tous les cadres maintenant, j'obtiens ceci:
Les contraintes que j'ai mises en place jusqu'à présent sont donc correctes. Je défais cela et commence à travailler sur la vue vert clair.
Ajuster l'aspect de la vue vert clair nécessite cinq contraintes:
- Une contrainte de rapport d'aspect prioritaire requise sur la vue vert clair. Vous pouvez créer cette contrainte dans un xib ou un storyboard avec Xcode 5.1 ou version ultérieure.
- Une contrainte de priorité requise limitant la largeur de la vue vert clair à être inférieure ou égale à la largeur de son conteneur.
- Une contrainte de priorité élevée définissant la largeur de la vue vert clair pour être égale à la largeur de son conteneur.
- Une contrainte de priorité requise limitant la hauteur de la vue vert clair à une valeur inférieure ou égale à la hauteur de son conteneur.
- Une contrainte de haute priorité définissant la hauteur de la vue vert clair pour être égale à la hauteur de son conteneur.
Considérons les deux contraintes de largeur. La contrainte inférieure ou égale, en soi, n'est pas suffisante pour déterminer la largeur de la vue vert clair; de nombreuses largeurs s'adapteront à la contrainte. Puisqu'il y a ambiguïté, la mise en page automatique essaiera de choisir une solution qui minimise l'erreur dans l'autre contrainte (prioritaire mais non requise). Minimiser l'erreur signifie rendre la largeur aussi proche que possible de la largeur du conteneur, tout en ne violant pas la contrainte inférieure ou égale requise.
La même chose se produit avec la contrainte de hauteur. Et comme la contrainte de rapport hauteur / largeur est également requise, elle ne peut que maximiser la taille de la sous-vue le long d'un axe (sauf si le conteneur a le même rapport hauteur / largeur que la sous-vue).
Donc, je crée d'abord la contrainte de rapport d'aspect:
Ensuite, je crée des contraintes de largeur et de hauteur égales avec le conteneur:
J'ai besoin de modifier ces contraintes pour être des contraintes inférieures ou égales:
Ensuite, je dois créer un autre ensemble de contraintes de largeur et de hauteur égales avec le conteneur:
Et je dois faire de ces nouvelles contraintes moins que la priorité requise:
Enfin, vous avez demandé que la sous-vue soit centrée dans son conteneur, je vais donc configurer ces contraintes:
Maintenant, pour tester, je vais sélectionner le contrôleur de vue et demander à Xcode de mettre à jour toutes les images. Voici ce que j'obtiens:
Oups! La sous-vue s'est développée pour remplir complètement son conteneur. Si je le sélectionne, je peux voir qu'en fait, il a conservé son rapport d'aspect, mais il fait un remplissage d' aspect au lieu d'un ajustement d' aspect .
Le problème est que sur une contrainte inférieure ou égale, il importe quelle vue se trouve à chaque extrémité de la contrainte, et Xcode a mis en place la contrainte opposée à mon attente. Je pouvais sélectionner chacune des deux contraintes et inverser ses premier et deuxième éléments. Au lieu de cela, je vais simplement sélectionner la sous-vue et modifier les contraintes pour qu'elles soient supérieures ou égales:
Xcode met à jour la disposition:
Maintenant, je fais tout de même la vue vert foncé en bas. Je dois m'assurer que son rapport d'aspect est de 1: 4 (Xcode l'a redimensionné de manière étrange car il n'avait pas de contraintes). Je ne montrerai plus les étapes car elles sont les mêmes. Voici le résultat:
Maintenant, je peux l'exécuter dans le simulateur iPhone 4S, qui a une taille d'écran différente de celle utilisée par IB, et tester la rotation:
Et je peux tester dans le simulateur iPhone 6:
J'ai téléchargé mon storyboard final dans cet élément pour votre commodité.