No estás describiendo escala a medida; Estás describiendo un ajuste de aspecto. (He editado su pregunta a este respecto.) La subvista se vuelve lo más grande posible mientras mantiene su relación de aspecto y se ajusta completamente dentro de su padre.
De todos modos, puedes hacer esto con el diseño automático. Puede hacerlo completamente en IB a partir de Xcode 5.1. Comencemos con algunas vistas:
La vista verde claro tiene una relación de aspecto de 4: 1. La vista verde oscuro tiene una relación de aspecto de 1: 4. Voy a establecer restricciones para que la vista azul llene la mitad superior de la pantalla, la vista rosa llene la mitad inferior de la pantalla y cada vista verde se expanda tanto como sea posible mientras mantiene su relación de aspecto y ajuste en su envase.
Primero, crearé restricciones en los cuatro lados de la vista azul. Lo fijaré a su vecino más cercano en cada borde, con una distancia de 0. Me aseguro de desactivar los márgenes:
Tenga en cuenta que todavía no actualizo el marco. Me resulta más fácil dejar espacio entre las vistas al configurar restricciones, y simplemente establecer las constantes a 0 (o lo que sea) a mano.
A continuación, fijo los bordes izquierdo, inferior y derecho de la vista rosa a su vecino más cercano. No necesito configurar una restricción de borde superior porque su borde superior ya está restringido al borde inferior de la vista azul.
También necesito una restricción de igual altura entre las vistas rosa y azul. Esto hará que cada uno llene la mitad de la pantalla:
Si le digo a Xcode que actualice todos los marcos ahora, obtengo esto:
Entonces, las restricciones que he establecido hasta ahora son correctas. Lo deshago y empiezo a trabajar en la vista verde claro.
El ajuste de aspecto de la vista verde claro requiere cinco restricciones:
- Una restricción de relación de aspecto de prioridad requerida en la vista verde claro. Puede crear esta restricción en un xib o storyboard con Xcode 5.1 o posterior.
- Una restricción de prioridad requerida que limita el ancho de la vista verde claro para que sea menor o igual que el ancho de su contenedor.
- Una restricción de alta prioridad que establece el ancho de la vista verde claro para que sea igual al ancho de su contenedor.
- Una restricción de prioridad requerida que limita la altura de la vista verde claro para que sea menor o igual que la altura de su contenedor.
- Una restricción de alta prioridad que establece que la altura de la vista verde clara sea igual a la altura de su contenedor.
Consideremos las dos restricciones de ancho. La restricción menor o igual, por sí sola, no es suficiente para determinar el ancho de la vista verde claro; muchos anchos se ajustarán a la restricción. Dado que existe ambigüedad, la distribución automática intentará elegir una solución que minimice el error en la otra restricción (de alta prioridad pero no obligatoria). Minimizar el error significa hacer que el ancho sea lo más cercano posible al ancho del contenedor, sin violar la restricción requerida menor o igual.
Lo mismo sucede con la restricción de altura. Y dado que también se requiere la restricción de la relación de aspecto, solo puede maximizar el tamaño de la subvista a lo largo de un eje (a menos que el contenedor tenga la misma relación de aspecto que la subvista).
Entonces, primero creo la restricción de la relación de aspecto:
Luego creo restricciones de ancho y altura iguales con el contenedor:
Necesito editar estas restricciones para que sean menores o iguales:
A continuación, necesito crear otro conjunto de restricciones de ancho y altura iguales con el contenedor:
Y necesito hacer que estas nuevas restricciones tengan menos prioridad de la requerida:
Finalmente, solicitó que la subvista se centre en su contenedor, así que estableceré esas restricciones:
Ahora, para probar, seleccionaré el controlador de vista y le pediré a Xcode que actualice todos los cuadros. Esto es lo que obtengo:
¡Uy! La subvista se ha expandido para llenar completamente su contenedor. Si lo selecciono, puedo ver que, de hecho, ha mantenido su relación de aspecto, pero está haciendo un relleno de aspecto en lugar de un ajuste de aspecto .
El problema es que en una restricción menor o igual, importa qué vista se encuentre en cada extremo de la restricción, y Xcode ha establecido la restricción opuesta a mi expectativa. Podría seleccionar cada una de las dos restricciones e invertir su primer y segundo elemento. En cambio, solo seleccionaré la subvista y cambiaré las restricciones para que sean mayores o iguales:
Xcode actualiza el diseño:
Ahora hago lo mismo con la vista verde oscuro en la parte inferior. Necesito asegurarme de que su relación de aspecto sea 1: 4 (Xcode lo redimensionó de una manera extraña ya que no tenía restricciones). No volveré a mostrar los pasos ya que son los mismos. Aquí está el resultado:
Ahora puedo ejecutarlo en el simulador de iPhone 4S, que tiene un tamaño de pantalla diferente al utilizado por IB, y probar la rotación:
Y puedo probar en el simulador de iPhone 6:
He subido mi guión gráfico final a esta esencia para su conveniencia.