interfaces human guidelines español bar apple xcode6 adaptive-ui
https://dl.dropboxusercontent.com/u/6402890/testSizeClasses.zip

xcode6 - human - navigation bar ios



¿Cómo pueden las interfaces de usuario adaptables de Xcode 6 ser compatibles con iOS 7 e iOS 6? (8)

Acabo de ver el video de la WWDC # 216, "Construyendo UI adaptable con UIKit".

Aproximadamente a las 45:10, Tony Ricciardi habla sobre cambios en IB en Xcode 6 para respaldar los nuevos cambios.

Él dice: "Puede implementar estos documentos al revés a versiones anteriores de iOS".

(donde "Estos documentos" presumiblemente significa XIB y guiones gráficos que tienen configuraciones específicas para diferentes clases de tamaño).

No estoy inventando esto. Ve a ver el video de WWDC.

¿Cómo es eso posible? Las colecciones de caracteres y las clases de tamaño solo se definen en iOS 8. ¿Cómo funciona el comportamiento del tiempo de ejecución dependiente de las construcciones de IU que son nuevas para iOS 8 y funcionan en versiones anteriores de iOS?

Si es posible, sería maravilloso. Puede crear aplicaciones que se ejecutarán en iOS 6, 7 y 8, y aprovechar las nuevas capacidades flexibles de diseño de interfaz de usuario que Apple ha agregado a Xcode 6. He creado una lógica de IU adaptativa en código, y es bastante de trabajo.


@lducool - En el constructor de interfaz, en el inspector de identidad, cambie ''Builds For'' a iOS7.1 y posterior.


Al implementar su aplicación en iOS 7, Xcode compilará su guión gráfico de dos maneras diferentes:

  • Para iPhone, su guión gráfico se compila como "Compacto-Normal" (ancho compacto, altura normal), y esto se empaqueta como su plumilla "~ iphone".

  • Para iPad, su guión gráfico se compila como "Regular-Regular" y se empaqueta como su plumilla "~ ipad".

Por lo tanto, si desea implementar tanto en iOS 7 como en iOS 8, debe enfocar su diseño en las clases de tamaño Compact-Any y Regular-Any. Eso le brindará la mejor experiencia en términos de coincidencia de la interfaz de usuario entre los objetivos de implementación. Por supuesto, puede modificar el diseño para otras clases de tamaño, pero a menos que esas modificaciones se apliquen a las clases de tamaño Compact-Regular o Regular-Regular, entonces no verá esas modificaciones en iOS 7.


Como algunas de las respuestas y comentarios discutían sobre la naturaleza de la compatibilidad con versiones anteriores, pensé que podría compartir un fragmento directamente de la documentación de Apple :

~~~~~

Implementación de una aplicación con clases de tamaño en versiones anteriores de iOS

Para las aplicaciones que admiten versiones de iOS anteriores a iOS 8, la mayoría de las clases de tamaño son compatibles con versiones anteriores.

Las clases de tamaño son compatibles con versiones anteriores cuando:

  • La aplicación está construida con Xcode versión 6 o posterior
  • El destino de implementación de la aplicación es anterior a iOS 8
  • Las clases de tamaño se especifican en un guión gráfico o xib
  • El valor del componente de altura no es compacto

~~~~~

El último punto se dirige a esta discusión, donde Apple confirma que, mientras no se use la "altura compacta" , debería mantener la compatibilidad con versiones anteriores.

¡Espero que esto ayude a alguien!


Desafortunadamente las respuestas de Dave y Joey no funcionan para mí. No tengo permitido comentar en este hilo, así que por favor, perdónenme si este es el lugar equivocado.

Formulé una pregunta específica para eso: Ejemplo de IU adaptable para el paisaje con retrato de iPhone que es compatible con iOS 7.

Por lo que aprendí hasta ahora, ahora creo que, como en mi ejemplo, no es posible tener 2 restricciones separadas y diferentes para un elemento ui en modo retrato y paisaje con iPhone iOS7 basado en clases de tamaño. Aunque me alegraría si estuviera equivocado.


Los cambios realizados en la interfaz de usuario con clases de tamaño en Interface Builder DO aparecen correctamente en dispositivos con iOS 7 y la vista previa en Xcode. Por ejemplo, modifiqué algunas restricciones de diseño automático y tamaños de fuente para el ancho regular de Altura regular y las restricciones modificadas son visibles en el simulador de iPad con iOS 7.0.

Todas las optimizaciones de clase de tamaño están disponibles para iOS 7, excepto las clases de tamaño que tienen una altura compacta. Esto ha sido confirmado por Apple y ahora se menciona directamente en la documentación :

Para las aplicaciones que admiten versiones de iOS anteriores a iOS 8, la mayoría de las clases de tamaño son compatibles con versiones anteriores.

Las clases de tamaño son compatibles con versiones anteriores cuando:
- La aplicación está construida con Xcode versión 6 o posterior
- El objetivo de despliegue de la aplicación es anterior a iOS 8
- Las clases de tamaño se especifican en un guión gráfico o xib
- El valor del componente de altura no es compacto

Debido a que iOS 7 no respeta un par de clases de tamaño, si las usa, se encontrará con problemas. Por ejemplo: cuando tiene Compact w Any h definido y luego Compact w Compact h definido, en iOS 7 respetará el Compact w Any h pero en iOS 8 rinde el aspecto Compact w Compact h.

Por lo tanto, si desea utilizar esas dos clases de tamaño y mantener la compatibilidad con iOS 7, haría cualquier optimización que desee para iPhone en formato horizontal en Any w Any h o Compact w Any h, luego realizaré las otras optimizaciones para diferentes clases de tamaño. según sea necesario, y de esa manera no necesitará usar ninguna clase de tamaño con altura compacta y evitará problemas.


Mientras lidiaba con un problema similar, encontré otra respuesta que aún no había visto. Parece que las clases de tamaño en los archivos XIB no funcionan en absoluto. Si creo un prototipo de celda en el archivo del storyboard , funciona en iOS7 como se explica en otras respuestas, sin embargo, cuando el mismo prototipo de celda se mueve a un archivo XIB separado, las clases de tamaño se ignoran en iOS7.

Aquí hay un enlace al proyecto de muestra que demuestra este comportamiento: https://dl.dropboxusercontent.com/u/6402890/testSizeClasses.zip

En la celda del prototipo, tengo cuatro restricciones desde cada borde de la vista gris. Cada uno de los configurados de la misma manera: Any / Any - 10, Regular / Regular - 20

Funciona bien en el simulador iOS8 para XIB y Storyboard, y en iOS7 solo las celdas definidas en Storyboard obtienen restricciones actualizadas en el iPad:


Si le ahorra tiempo a alguien, creo que la forma en que Xcode 6 brinda compatibilidad cuasi retroactiva para las clases de tamaño es a través de históricos storyboards con sufijo ~ipad y ~iphone , y nada más. Esto tiene sentido ya que las clases de tamaño son una forma más abstracta de cómo definimos previamente un guión gráfico de iPad y un guión gráfico de iPhone.

Por lo tanto:

  • Si su objetivo es usar clases de tamaño para admitir diseños específicos de familia de dispositivo (iPad o iPhone), entonces tiene suerte: las clases de tamaño son una interfaz más agradable para el método admitido anteriormente.

  • Si su objetivo es utilizar clases de tamaño para admitir diseños modificados para diferentes modelos dentro de la misma familia de dispositivos, es decir. iPhone 5/6/6 + inc. paisaje, entonces estás fuera de suerte . El uso de estos requeriría un objetivo mínimo de implementación de iOS 8.


Nota: Esta respuesta fue relevante para una versión beta de Xcode 6 y ya no se aplica a la versión de envío. Vea las respuestas de Joey y Dave DeLong en esta página para obtener la información adecuada.

(respuesta original retenida a continuación):

Mientras Storyboards/XIBs configurados para usar clases de tamaño se ejecutará en iOS 7 , el sistema operativo actualmente no respeta esas size classes y parece usar la clase de tamaño ''Any / Any'' predeterminada.

Estoy de acuerdo en que la diapositiva particular a la que se refiere parece prometer tal compatibilidad, pero no parece ser el caso actualmente (Xcode 6 beta 2) .

Para probar, creé un proyecto (iOS 8 SDK, deployment target of 7.1) con un solo botón centrado vertically and horizontally en la clase de tamaño Any / Any, pero alineado a la esquina superior izquierda en la clase de tamaño Compact / Compact ( por ejemplo, iPhone en el paisaje). El asistente de previsualización de Xcode muestra que el botón cambia su posición en iOS 8 , pero no en iOS 7 . Confirmé este comportamiento en un iOS 7 también.