Interface Builder: ¿Para qué sirven los diseños del UIView''s iOS 6/7?
layout xcode5 (6)
AutoLayout requiere al menos iOS 6.0. Si desea soportar iOS 5.0, no podría usar AutoLayout.
Y esos deltas se utilizan para ayudarlo a ajustar la posición de visualización en diferentes versiones de iOS (principalmente iOS 7 y iOS versión inferior a 7).
Yo uso esos valores para ayudarme con esta imagen.
Me acabo de dar cuenta de que la propiedad Delta 6/7 de Delta se encuentra en el diseño de estructuras de UIView.
¿Para qué es esto y por qué falta esto en AutoLayout?
En realidad, esto se refiere al Delta entre la posición de diseño de iOS6 a iOS7.
En iOS7, algunas vistas pueden ocultar la barra de estado o hacer que sea transparente y, de hecho, se superpone en la parte superior de la vista. Entonces, si coloca un elemento de IU en (0.0, 0.0) en iOS6, aparecerá debajo de la barra de estado, pero en iOS7 aparecerá parcialmente cubierto debajo de la barra de estado. Entonces, en ese caso, querría un delta que coincida con la altura de la barra de estado (20.0 puntos) para que el diseño tenga el mismo aspecto en iOS6 e iOS7.
Creo que esto no es necesario si utilizas el diseño automático, pero por supuesto, luego pierdes el soporte para iPad1, que muchos de nosotros no estamos dispuestos a admitir en este momento.
Para ver iOS 6/7 Delta en acción, haré una demostración con un SegmentedControl que aparecerá correctamente en los dispositivos con iOS 6 e iOS 7.
Primero, seleccione su .Xib o ViewController en Storyboard. Desmarque Usar diseño automático y seleccione " Ver como iOS 7 y posterior "
En el lienzo de Interface Builder, coloque su SegmentedControl para que su origen.y sea 20. En iOS 6/7 Delta, elija -20 para DeltaY
Esto hará que su SegmentedControl se coloque debajo de la barra de estado en dispositivos iOS 6 e iOS 7
Otras citas útiles de la Guía del desarrollador de la barra de estado de iOS 7
Los deltas se pueden configurar individualmente para cada vista y trabajar como se espera. Si su storyboard o punta está configurado para visualizarse como iOS 6, la configuración de los deltas provocará que esa vista se cambie y / o cambie de tamaño según la cantidad delta establecida cuando se ejecute en iOS 7. Alternativamente, si su storyboard o punta está configurado para ver en iOS 7, los deltas se aplicarán cuando se ejecuten en iOS 6
Sé que esto ya ha sido respondido, simplemente agregué una pequeña variante esperando que también pudiera ayudar a aquellos que no usan el diseño automático y aún quieren soportar iOS 6.1 y versiones anteriores.
Lea esta Guía de transición de Apple: compatible con la versión anterior
Elija ''Ver como'' para ''iOS 7.0 y posterior''
UI base para iOS 7. Para iOS 6, proporcione el valor delta adecuado. Usa la vista previa para ver cómo se renderizará en iOS 7 y iOS 6.
Pasos rápidos:
Seleccione cada hijos inmediatos de la vista raíz individualmente y agregue 20px a su valor ''Y''.
Luego, seleccione todos los hijos inmediatos colectivamente y dé delta Y como -20px. También puedes hacer esto por lotes o individualmente.
Si está utilizando AutoLayout, Delta no está disponible. Pruebe esto (probado en iPhone 4s con iOS6):
- (void) viewWillLayoutSubviews {
//iOS 6 workaround offset
if ([[[UIDevice currentDevice] systemVersion] floatValue] < 7) {
self.view.clipsToBounds = YES;
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenHeight = 0.0;
screenHeight = screenRect.size.width;
CGRect screenFrame = CGRectMake(0, -20, self.view.frame.size.width,self.view.frame.size.height+10);
self.view.frame = screenFrame;
}
}
Nota: Hace un tiempo noté esta pregunta, pero ahora solo estoy publicando mi respuesta porque se ha levantado la NDA.
¿Por qué no aparece para AutoLayout?
Como habrás notado, iOS 7 trae un aspecto completamente nuevo. La apariencia de los elementos de la interfaz de usuario ha cambiado, pero también algunos de sus tamaños (o métricas en general). Esto puede hacer que el diseño de la interfaz sea idóneo tanto para iOS 7 como para sus predecesores.
La línea oficial de Apple es usar AutoLayout para resolver esto; esto debería quitarle la molestia de diseñar los elementos de la interfaz de usuario para usted. A veces, incorporar esto no se hace fácilmente, especialmente si todavía debe admitir iOS 5 por motivos de negocios, o 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 no está clara en cuanto a qué significa "Delta" en este contexto, el código que se encuentra 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 clave insetFor6xAndEarlier
establece explícitamente lo que hace; puede proporcionar inserciones alternativas 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:
x: 50
y: 100
width: -100
height: 200
Mientras que los valores almacenados en .xib no se corresponden directamente con los valores citados, existe una correlación entre ellos.
x: -minX
y: -minY
width: minX + maxX
height: minY + maxY
Las imágenes a continuación muestran este cambio visualmente. Es un ejemplo bastante extremo, pero es para demostrar su habilidad. Solo esperaría en la práctica tener cambios delta de solo unos pocos píxeles.
Puede observar que los valores son 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, existen los deltas para transformar el elemento correctamente para iOS 7 (al contrario del ejemplo anterior).
Para ver los diferentes estilos, puede cambiar la forma en que Interface Builder lo presenta en función del SO en el que se estaría ejecutando. Esto está contenido en el Inspector de archivos-> Documento de compilador de interfaz (1ª pestaña en la barra derecha), así:
¿Esto existe si me gusta codificar mi interfaz a mano?
No directamente, pero puede lograr fácilmente el mismo efecto al tener verificaciones condicionales en la versión del sistema operativo dentro de su código, y establecer la posición / tamaño correcto en consecuencia. La habilidad delta existe en Interface Builder porque no habría una forma directa de tener un posicionamiento condicional sin tener un código para hacerlo, y el punto de Interface Builder es conseguir un código mucho más alejado de la UI.
En general...
Apple recomienda encarecidamente que utilice AutoLayout, que le hace la vida más fácil en la mayoría de los casos. Si no puede usarlo (por los motivos mencionados anteriormente), los deltas le brindan la flexibilidad de colocar sus elementos de interfaz de usuario de manera adecuada, en función de las métricas actuales del sistema operativo, 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 característica / no la descubrirá. Solo si necesita tener dispositivos con iOS6 ejecutando su aplicación cuando se compila con el SDK de iOS7, sin autolayout, necesita deltas.
En el momento de la redacción (21 de agosto), no puedo encontrar ninguna documentación con respecto a 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 descubrí.