Xcode 6 Storyboard del tamaño incorrecto?

139

Construí un nuevo proyecto desde cero en Swift en Xcode 6 (Beta 1) y he visto un comportamiento extraño con Storyboards y la salida que estoy viendo.

He creado una interfaz simple (como se muestra a continuación), con las propiedades de View Controller incluidas. Cuando ejecuto esto en el simulador, esperaría que 'Hello, World' sea central en la interfaz de usuario; sin embargo, parece que este 'Square' simplemente se está ajustando a la pantalla del iPhone y, por lo tanto, se muestra una vista incorrecta (ver a continuación )

Mi pregunta es: ¿alguien más ha visto este comportamiento y cómo lo solucionaron?

¡Gracias!

Vista desde el editor de guiones gráficos

Inspector de atributos

Inspector de tallas

Salida del simulador

Algodón de azúcar
fuente
agregue restricciones de diseño automático, eso debería solucionarlo. actualmente está diseñando para todos los diseños, por lo que los diseños automáticos lo ayudarán a mostrar el contenido en el lugar "correcto".
Raz
8
Consejos: Usando el editor asistente> automático> Vista previa, podrá ver una vista previa de la pantalla con todos los tamaños de pantalla
Francescu

Respuestas:

81

Si bien la respuesta de Asif Bilal es una solución más simple que no involucra Clases de tamaño (que se introdujeron en iOS 8), se recomienda encarecidamente que se acostumbre a las clases de tamaño, ya que son el futuro, y eventualmente se incorporará de alguna manera. punto."


Probablemente no haya agregado las restricciones de diseño.

Seleccione su etiqueta, toque el botón de restricciones de diseño en la parte inferior:

ingrese la descripción de la imagen aquí

En ese menú, agregue ancho y alto (NO debe ser el mismo que el mío) marcando su casilla de verificación y haga clic en Agregar restricciones. Luego Control-arrastre su etiqueta a su vista principal, y luego cuando haga clic en, debe tener las opciones para centrar horizontal y verticalmente en el contenedor. Agregue ambos, y debería estar configurado.

Can Poyrazoğlu
fuente
1
Excelente - esto funcionó muy bien para mí - Gracias por su ayuda (aceptará su respuesta cuando se levante el temporizador)
Candyfloss
1
De nada. Este es el comportamiento predeterminado con autolayout, que ahora está habilitado de manera predeterminada. Recuerde, debido a los posibles tamaños / diseños de pantalla diferentes, debe haber una forma de calcular dónde se colocará una vista en relación con su padre, y la distribución automática soluciona este problema. cuando no agrega estas restricciones, la vista las crea automáticamente en tiempo de ejecución pero en relación con la esquina superior izquierda. Si necesita algo más que eso (casi siempre necesita algo más), debe especificar las restricciones explícitamente.
Can Poyrazoğlu
44
Tenga en cuenta que el control de arrastre (que puede ser incómodo) no es necesario. El botón a la izquierda del seleccionado en esta imagen abre un menú que le permite fijar los centros horizontal y vertical.
jrturton
Tienes razón ... Estoy acostumbrado a arrastrar y controlar, por eso lo he dicho de esa manera.
Can Poyrazoğlu
@ CanPoyrazoğlu - Usted menciona "Seleccione su etiqueta". Que etiqueta Tengo el mismo problema con un nuevo proyecto de iPhone en el que no tengo etiquetas u otros elementos de la interfaz de usuario. Mi primer proyecto en Xcode 6, utilizando Objective C.
rattletrap99
253

Siga los siguientes pasos para resolver el problema.

En Storyboard, seleccione cualquier vista, luego vaya al inspector de archivos. Desactive la casilla "Usar clases de tamaño", le pedirá que mantenga los datos de la clase de tamaño para: iPhone / iPad. Y luego haga clic en el botón "Deshabilitar clases de tamaño". Hacer esto hará que el tamaño de vista del guión gráfico con el dispositivo seleccionado.

Asif Bilal
fuente
8
Esta es la respuesta correcta si está obteniendo un controlador de vista de 600x600 cuando quería un controlador de vista de tamaño estándar de iPhone, por ejemplo.
Fraggle
55
Esta debería ser la respuesta correcta (al menos para aquellos que solo trabajan en plataformas no universales)
Raptor
36
No sé por qué la gente marcó esto como la respuesta correcta ... la primera es la forma en que debe hacerse ... Si no le gustan las restricciones de diseño, entonces va en la dirección inversa ... Apple está aprovechando ¿Es una buena forma de desarrollar para todos los tamaños de iPhone y iPad y solo desea volver a las cosas antiguas? ¿Porque no puede permitirse actualizarse usted mismo? Nunca hacia abajo votado pero parece que esto confunde answer y luego hace uso del enfoque de edad (que será obsoleto) en vez de alentar a continuación, utilizar el nuevo material ...
Rafael Ayres
3
La mejor respuesta para todos los que están acostumbrados a los storyboards de iPhone / iPad
mamarx
3
Use las restricciones de diseño ... Apple está haciendo esto de la misma manera que funciona Android. La vista no tiene forma ... A veces puede ser una molestia, pero si fuerza el tamaño, su aplicación se verá mal en diferentes tamaños de dispositivo. Si desea que aparezca un botón en la esquina inferior derecha, simplemente cree 2 restricciones para él y prohíba ... ninguna selección X o Y. Todo será configurado por el motor. Usa tamaños intrínsecos. Use su imaginación. Usa restricciones relacionales. Aprende esto s ***.
Raphael Ayres
18

Si usa Xcode 6 y diseña para iOS 8, ninguna de estas soluciones es correcta. Para que sus vistas solo de iPhone tengan el tamaño correcto, no desactive las clases de tamaño, no desactive las métricas inferidas y no establezca restricciones (todavía). En su lugar, utilice el control de clase de tamaño, que es un botón de texto fácil de omitir en la parte inferior de Interface Builder que inicialmente lee "wAny hAny".

Haga clic en el botón y elija Ancho compacto, Altura normal. Esto cambia el tamaño de sus vistas y cubre todas las orientaciones de retrato de iPhone. Documentos de Apple aquí: https://developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/SelectingASizeClass.html o busque "Seleccionar una clase de tamaño en Interface Builder"

Eli Burke
fuente
Creo que es útil leer toda la Ayuda de Diseño de Clases de Tamaño en su enlace, es decir, desde Diseñar para Clases de Tamaño Múltiple hasta Implementar una Aplicación con Clases de Tamaño en versiones anteriores de iOS .
Franklin Yu
Esta es una gran solución si desea mantener el diseño automático pero desea que las vistas del guión gráfico aparezcan como paisaje o retrato en lugar de un cuadrado.
stephenspann
5

En Storyboard, seleccione su ViewController y vaya a Atribute Inspector. En la parte superior, en Métricas simuladas, tiene propiedades de Tamaño y Orientación configuradas como Inferidas. Cámbielos a los valores deseados.

Para que una aplicación se muestre correctamente en otro tamaño de pantalla, también debe configurar restricciones, como lo describe Can Poyrazoğlu en la primera publicación.

David Andrews
fuente
5

Tuve este problema en xcode 6 y hay una manera de resolver los conflictos de cambio de tamaño. Si selecciona su vista, en la parte inferior verá un icono que se parece a | -Δ- |. Si hace clic en él, su proyecto cambiará de tamaño para diferentes dispositivos.

usuario2961953
fuente
Sí, y después de seleccionar el símbolo del triángulo, haga clic en agregar restricciones faltantes y la vista de boom que haya terminado cambiará de tamaño según el tamaño del dispositivo si su aplicación universal
vishal dharankar
3

Vaya al Inspector de atributos (esquina superior derecha) en la métrica simulada, que tiene las propiedades Tamaño, Orientación, Barra de estado, Barra superior, Barra inferior. Para TAMAÑO, cambie Inferido -> Forma libre.

Rachel
fuente
+1 @Rachel gracias por este pequeño consejo útil sobre Métricas simuladas -> Tamaño: "Forma libre" (también conocido como "habilitar un tamaño personalizado para un xib reutilizable respaldado por una vista personalizada").
cweekly
3

En su página del guión gráfico, vaya al Inspector de archivos y desactive 'Usar clases de tamaño'. Esto debería reducir su controlador de vista al tamaño normal de iPhone con el que estaba familiarizado. Tenga en cuenta que el uso de 'clases de tamaño' le permitirá diseñar su proyecto en muchos dispositivos. Una vez que desmarca esto, el Xcode le dará un diálogo de advertencia de la siguiente manera. Esto debería explicarse por sí mismo.

"Deshabilitar las clases de tamaño limitará este documento a almacenar datos para una sola familia de dispositivos. Los datos para la clase de tamaño que mejor represente el dispositivo de destino se conservarán, y todos los demás datos se eliminarán. Además, los valores se convertirán a su "equivalentes adaptativos".

Oh mi
fuente
3

Para cualquiera que use XCode 7, es muy fácil diseñar para un tamaño de dispositivo específico (en lugar del lienzo cuadrado predeterminado).

En Interface Builder, seleccione su ViewController o Scene en el menú de la izquierda. Luego debajo Show the Attributes Inspector, vaya a Simulated Metrics, y elija el deseado Sizedel menú desplegable.

Sacerdote
fuente
Eso solo le permitirá diseñar en su guión gráfico para ese dispositivo. Cuando ejecuta su aplicación, su diseño puede variar enormemente para diferentes tamaños de pantalla.
Joey Tawadrous
@JoeyTawadrous Exactamente. Pero responde a la pregunta formulada :)
Sacerdote
2

Probablemente usará "Resolver problemas de diseño automático" (icono de triángulo inferior derecho en la vista del guión gráfico) para agregar / restablecer las restricciones sugeridas (Xcode 6.0.1).

swnn
fuente