Interface Builder: ¿Para qué sirven los Deltas de diseño iOS 6/7 de UIView?

Acabo de notar la propiedad Delta de iOS 6 / 7 que se encuentra en el diseño de estructuras de UIView.

¿Para qué sirve esto y por qué falta en AutoLayout?

enter image description here

Respuestas:6 Respuestas 6
Tiempo:hace 9 años, 2 meses
Última modificación:hace 7 años, 2 meses

Solución

Nota: Noté esta pregunta hace un tiempo, pero solo estoy publicando mi respuesta ahora porque el NDA se ha levantado

¿Por qué no aparece para AutoLayout?

Como habrás notado, iOS 7 trae un aspecto completamente nuevo. El aspecto de los elementos de la interfaz de usuario ha cambiado, pero también lo han hecho algunos de sus tamaños (o métricas en general). Esto puede hacer que el diseño de la interfaz para acomodar tanto iOS 7 como sus predecesores sea un poco doloroso.

La línea oficial de Apple es usar AutoLayout para resolver esto; esto debería eliminar gran parte de la molestia de diseñar elementos de interfaz de usuario para usted. A veces, la incorporación de esto no se hace fácilmente, especialmente si aún debe admitir iOS 5 por razones comerciales, o si sus interfaces se administran de una manera que dificulta la implementación de AutoLayout. Como tal, Apple parece haber proporcionado una manera de hacer su trabajo un poco más fácil si cae en esta categoría de nicho, y lo han llamado iOS 6 / 7 Deltas.

Ok entonces, ¿qué hace?

Si bien la etiqueta en Interface Builder es un poco confusa en cuanto a lo que significa ‘Delta’ en este contexto, el código contenido en el archivo .xib que corresponde a esta característica es un poco más claro:

<inset key="insetFor6xAndEarlier" minX="-50" minY="-100" maxX="-50" maxY="300"/>

El nombre de la clave indica explícitamente lo que esto hace; puede proporcionar recuadros alternativos para los elementos de la interfaz de usuario cuando se ejecutan en los predecesores de iOS 7. Por ejemplo, lo anterior define el siguiente cambio delta:insetFor6xAndEarlier

x: 50
y: 100
width: -100
height: 200

Si bien los valores almacenados en el .xib no corresponden directamente a los valores citados, existe una correlación entre ellos.

x: -minX
y: -minY
width: minX + maxX
height: minY + maxY

Las siguientes imágenes muestran este cambio visualmente. Es un ejemplo bastante extremo, pero es para demostrar su capacidad. Solo esperaría en la práctica tener cambios delta de solo unos pocos píxeles.

iOS7 View

iOS6 View

Puede notar que los valores son los inversos para la vista de iOS 6; esto se debe a que los deltas son relativos al tipo de vista con la que está trabajando. Si está editando para iOS 6, los deltas que hay para transformar el elemento correctamente para iOS 7 (el reverso del ejemplo anterior).

Para ver los diferentes estilos, puede cambiar la forma en que Interface Builder lo presenta en función del sistema operativo en el que se ejecutaría. Esto está contenido en el Documento file Inspector->Interface Builder (1ª pestaña en la barra derecha), así:

Interface Style Switch

¿Existe esto si me gusta codificar mi interfaz a mano?

No directamente, pero puede lograr fácilmente el mismo efecto al tener comprobaciones condicionales en la versión del sistema operativo dentro de su código y establecer la posición / tamaño correcto en consecuencia. La capacidad delta existe en Interface Builder porque no habría una forma sencilla de tener posicionamiento condicional sin tener código para hacerlo, y el objetivo de Interface Builder es obtener una gran cantidad de código fuera del camino como sea posible para la interfaz de usuario.

En general…

Apple recomienda encarecidamente que use AutoLayout, ya que le hace la vida más fácil en la mayoría de los casos. Si no puede usarlo (por las razones mencionadas anteriormente), los deltas le brindan la flexibilidad de posicionar los elementos de la interfaz de usuario de manera adecuada, según las métricas del sistema operativo actual, sin la necesidad de reposicionarlos manualmente en el código. Un buen ejemplo es ajustar la falta de barra de estado, pero hay muchos otros casos de uso.

Naturalmente, si solo está desarrollando para iOS7 y superior, no necesita conocer esta función / no la descubrirá. Solo si necesita tener dispositivos iOS6 ejecutando su aplicación cuando se construye con el SDK de iOS7, sin diseño automático, necesita deltas.

En el momento de escribir este artículo (21 de agosto), no puedo encontrar ninguna documentación sobre esta característica, ni ninguna mención en el material de la WWDC. He tenido un juego, y después de un poco de investigación, eso es lo que he descubierto.

Otras respuestas

I know this is already been answered, just adding a small variant hoping it could also help those who don’t use auto layout and still want to support iOS 6.1 and earlier versions.

Read this Apple’s Transition Guide – Supporting earlier version

Choose ‘View as’ to ‘iOS 7.0 and Later’

enter image description here

Base UI for iOS 7. For iOS 6 give suitable delta value. Use preview to see how this will render in iOS 7 and iOS 6 device.

enter image description here

Quick steps:

Select each immediate children of root view individually and add 20px to its ‘Y’ value.

enter image description here

Then, select all immediate children collectively and give delta Y as -20px. You can also do this in batch or individually.

enter image description here

Deja un comentario