Advertisement
  1. Code
  2. Mobile Development
  3. iOS Development

iOS desde cero con Swift: Conceptos básicos de diseño automático

Scroll to top
Read Time: 13 min
This post is part of a series called iOS From Scratch With Swift.
iOS From Scratch With Swift: First Steps With UIKit
iOS From Scratch With Swift: Table View Basics

() translation by (you can also view the original English article)

En el artículo anterior, creamos una aplicación simple con nada más que una etiqueta y un botón. A pesar de su simplicidad, la aplicación tenía algunos problemas de diseño. En este tutorial, aprenderás a resolver esos problemas utilizando el sistema de diseño de Apple, Auto Layout. Comencemos con un nuevo proyecto.

Introducción

Abre Xcode y crea un nuevo proyecto, eligiendo la plantilla de Aplicación de Vista Única. Asigna un nombre a la aplicación Auto Layout y configura los Dispositivos en Universal. Dile a Xcode dónde guardar el proyecto y haz clic en Crear.

Configuring the ProjectConfiguring the ProjectConfiguring the Project

Recuerda que anteriormente en esta serie, una aplicación universal se ejecuta en iPad y en iPhone (y en iPod Touch). Esto significa que la interfaz de usuario debe adaptarse al dispositivo en el que se está ejecutando. Exploremos cómo funciona eso y qué problemas debemos resolver para lograrlo.

En el proyecto, abre Main.storyboard y agrega cinco etiquetas a la vista del controlador de vista. Como puedes ver en la captura de pantalla siguiente, coloqué una etiqueta en el centro de la vista y una en cada una de sus esquinas.

Adding Five LabelsAdding Five LabelsAdding Five Labels

Probablemente hayas notado que Xcode intenta ayudarte a colocar las etiquetas, mostrando líneas azules discontinuas cuando te acercas a los bordes o al centro de la vista. Sigue los consejos de Xcode y haz que las etiquetas se ajusten en los bordes y en el centro de la vista.

Snapping a Label Into the CornerSnapping a Label Into the CornerSnapping a Label Into the Corner
Snapping a Label Into the CenterSnapping a Label Into the CenterSnapping a Label Into the Center

Debido a que estamos creando una aplicación universal, la aplicación debería verse bien tanto en iPad como en iPhone. Ejecuta la aplicación en el simulador y elige iPad Retina (o cualquier otro simulador de iPad) como destino.

Setting the Destination to iPad RetinaSetting the Destination to iPad RetinaSetting the Destination to iPad Retina

Ouch. La interfaz de usuario no se ve muy bien en iPad. Solo la etiqueta superior izquierda se coloca correctamente.

The labels are not correctly positionedThe labels are not correctly positionedThe labels are not correctly positioned

Cambia el destino a iPhone 6 (o cualquier otro simulador de iPhone) y ejecuta la aplicación una vez más.

Setting the Destination to iPhone 6Setting the Destination to iPhone 6Setting the Destination to iPhone 6

La interfaz de usuario se ve aún peor en iPhone. Dos etiquetas ni siquiera son visibles en el iPhone. Al igual que en el iPad, solo la etiqueta superior izquierda se coloca correctamente.

The labels are not correctly positionedThe labels are not correctly positionedThe labels are not correctly positioned

El objetivo de este tutorial es solucionar estos problemas de la interfaz de usuario con Auto Layout. Antes de que podamos aplicar el diseño automático, necesitamos saber qué es y cómo puede ayudarnos.

¿Qué es el diseño automático o Auto Layout?

Auto Layout se introdujo en iOS con el lanzamiento de iOS 5, hace varios años. El diseño automático es un sistema de diseño que es descriptivo y se basa en restricciones. Esto simplemente significa que le dice al motor de diseño cómo desea que se configure la interfaz de usuario. En otras palabras, en lugar de decirle al motor de diseño que un botón necesita colocarse en una ubicación específica, describe dónde debe colocarse.

Las restricciones se utilizan para definir o describir un diseño. Por ejemplo, le dice al motor de diseño que un botón debe estar centrado horizontalmente en su vista contenedora. El motor de diseño toma un conjunto de restricciones, las transforma en ecuaciones y establece los marcos de los elementos en la interfaz de usuario. Para que esto funcione, debes agregar tantas restricciones para evitar cualquier ambigüedad sobre la posición de un elemento.

La ventaja del Auto Layout es que es simple. Gracias a la naturaleza descriptiva del Auto Layout, el motor de diseño actualiza la interfaz de usuario, independientemente de las dimensiones o la orientación del dispositivo en el que se ejecuta la aplicación. También hace que tu aplicación sea a prueba de futuro. Cuando Apple introduce un dispositivo con un nuevo tamaño de pantalla, tu aplicación ajustará automáticamente su interfaz de usuario para adaptarse al nuevo tamaño de pantalla. Esto no es cierto si codificas la interfaz de usuario de tu aplicación.

Ahora que ya sabes qué es Auto Layout y cómo funciona, es hora de explorar cómo podemos aplicar el Auto Layout para solucionar los problemas de diseño en nuestro proyecto.

Agregar restricciones

¿Recuerdas las pautas azules que viste cuando añadiste las etiquetas a la vista del controlador de vista? Esas no son las restricciones que estás buscando. Como dije, son pautas para ayudarte a ubicar los elementos de la interfaz de usuario. No son más que pistas. Xcode te permite apegarte a las Pautas de interfaz humana de Apple.

Hay varias maneras de agregar restricciones a un elemento de interfaz de usuario. Una forma es usar el menú Pin en la parte inferior de Interface Builder. Selecciona la etiqueta en la esquina superior izquierda y haz clic en el menú Pin en la parte inferior.

Opening the Pin MenuOpening the Pin MenuOpening the Pin Menu

La etiqueta en la parte superior izquierda todavía no tiene restricciones. Vamos a cambiar eso al fijar la etiqueta en la parte superior izquierda de su vista principal o supervista. Usando el menú Pin, podemos agregar múltiples restricciones al mismo tiempo. Agreguemos también restricciones para establecer el ancho y alto de la etiqueta para que sean fijos marcando las casillas de verificación etiquetadas Anchura y Altura. Este es el aspecto que debería tener el menú Pin. Tenga en cuenta que la casilla de verificación para Restringir los márgenes está desmarcada.

Adding Constraints to the LabelAdding Constraints to the LabelAdding Constraints to the Label

En la parte inferior del menú Pin, el texto del botón ahora dice Agregar 4 restricciones. Xcode nos dice que aún no hemos agregado ninguna restricción. Haz clic en el botón para agregar las restricciones que hemos especificado en el menú Pin. La posición de la etiqueta ahora está definida o descrita por cuatro restricciones. Esto se visualiza en el storyboard por cuatro líneas azules que rodean la etiqueta.

Constraints of the LabelConstraints of the LabelConstraints of the Label

Antes de continuar, agrega restricciones a las etiquetas superior derecha, inferior izquierda e inferior derecha. Es importante que fijes cada etiqueta al borde más cercano de su vista principal. Por ejemplo, la etiqueta inferior derecha debe estar fijada al borde inferior y al borde derecho de la vista del controlador de vista. Este es el aspecto que debería tener el menú Pin para la etiqueta inferior derecha.

Adding Constraints to the Bottom Right LabelAdding Constraints to the Bottom Right LabelAdding Constraints to the Bottom Right Label

Con las restricciones implementadas, ejecuta la aplicación en el simulador. Esto es lo que deberías ver en el simulador de iPhone 6. Eso se ve mucho mejor. La etiqueta central aún no tiene restricciones. Vamos a agregar algo ahora.

This is looking much betterThis is looking much betterThis is looking much better

Selecciona la etiqueta del centro y agrega dos restricciones para fijar el ancho y alto de la etiqueta, utilizando el menú Pin en la parte inferior. ¿Esperabas ver dos líneas azules? Si has agregado correctamente las restricciones, deberías ver las líneas rojas, no las líneas azules. ¿Porqué pasó eso? Las líneas rojas indican que algo anda mal. Xcode nos dice que la etiqueta no tiene suficientes restricciones para evitar la ambigüedad. La descripción de la posición de la etiqueta actualmente está incompleta.

Missing ConstraintsMissing ConstraintsMissing Constraints

Le hemos dicho a Xcode que la etiqueta debe tener un ancho fijo y una altura fija. Lo que aún no hemos definido es la posición horizontal y vertical de la etiqueta. Puedes obtener más información sobre el problema inspeccionando el error en el panel de la izquierda. Deberías ver una flecha roja a la izquierda de View Controller Scene. Haz clic en la flecha para leer el mensaje de error.

Xcode Error MessagesXcode Error MessagesXcode Error Messages
Xcode Error MessagesXcode Error MessagesXcode Error Messages

Los errores nos dicen que las posiciones X e Y no están definidas. Si haces clic en el círculo rojo al lado del error, Xcode te ofrece la opción de solucionar los problemas al agregar las restricciones que faltan. No seamos perezosos y arreglemos el problema nosotros mismos.

Para centrar la etiqueta, independientemente de las dimensiones y la orientación del dispositivo en el que se ejecuta la aplicación, no podemos usar el menú Pin. En cambio, usamos el menú Alinear a la izquierda del menú Pin. Con la etiqueta seleccionada, abre el menú Alinear y agrega dos restricciones para centrar la etiqueta en su vista principal. Al agregar estas restricciones, las líneas rojas se reemplazan por líneas azules.

Adding Missing ConstraintsAdding Missing ConstraintsAdding Missing Constraints

Inspección de restricciones

Es hora de aprender más sobre las restricciones. Las restricciones no son estáticas y ciertamente no son mágicas. Puedes agregar, eliminar y modificar restricciones. Como ejemplo, echemos un vistazo a las restricciones de la etiqueta del centro. Selecciona la etiqueta y abre el Inspector de tamaño a la izquierda. La sección Restricciones enumera las restricciones de la selección actual, la etiqueta central. Cada restricción tiene un botón Editar para modificar los atributos de la restricción.

Inspecting ConstraintsInspecting ConstraintsInspecting Constraints

Haz clic en el botón Editar de la restricción que dice Ancho igual a: 42. Al modificar la propiedad Constant, puedes cambiar el ancho de la etiqueta. Establece Constant en 100 y presiona Enter o Return para confirmar el cambio. El tamaño de la etiqueta en el storyboard refleja de inmediato el cambio que hemos realizado.

Modifying ConstraintsModifying ConstraintsModifying Constraints

La propiedad de Prioridad de la restricción es importante si las restricciones múltiples entran en conflicto entre sí. Vamos a ilustrar esto con un ejemplo. Selecciona la etiqueta del centro y agrega una nueva restricción que establezca el ancho de la etiqueta en 200. Ya sabes cómo hacer esto. Ya sabes cómo hacerlo. Cuando agregas la nueva restricción, Xcode se queja de que no puede cumplir ambas restricciones al mismo tiempo.

Conflicting ConstraintsConflicting ConstraintsConflicting Constraints

Selecciona la etiqueta y abre el Inspector de tamaño para inspeccionar las restricciones. Hay dos restricciones que establecen el ancho de la etiqueta. Haz clic en el botón Editar de la restricción que dice Ancho igual a 100 y establece la Prioridad en Alto (750). El ancho de la etiqueta cambia a 200 en el guión gráfico y una de las líneas azules cambia de sólida a punteada, lo que indica que esta restricción es anulada por una restricción con una prioridad más alta. La restricción discontinua sigue activa, pero actualmente no se está aplicando debido a su menor prioridad en comparación con la restricción que establece el ancho de la etiqueta en 200.

Overruling ConstraintsOverruling ConstraintsOverruling Constraints

Hay otra forma de resolver el problema. Establece la prioridad de ambas restricciones en Requerido (1000). Al mismo tiempo, cambia = por >= para la restricción que dice Ancho igual a: 100. Esto también resuelve el problema. Sin embargo, el resultado no es el mismo. Ambas restricciones están vigentes, trabajando juntas para definir la posición de la etiqueta. La restricción ahora define que el ancho de la etiqueta debe ser mayor o igual a 100.

Collaborating ConstraintsCollaborating ConstraintsCollaborating Constraints

Agregando más restricciones

Ya mencioné que hay varias maneras de agregar restricciones en el constructor de interfaz. Veamos otra técnica popular. Abre la Biblioteca de objetos a la derecha y agrega un campo de texto a la vista del controlador de vista. Para fijar el campo de texto en la parte superior de la vista, selecciona el campo de texto, presiona Control y arrastra desde el campo de texto a la parte superior de la vista. Echa un vistazo a la siguiente captura de pantalla para entender mejor.

Another Way to Add ConstraintsAnother Way to Add ConstraintsAnother Way to Add Constraints

Desde el menú que aparece, selecciona Espaciado vertical a la Guía de diseño superior. La guía de diseño superior es una guía especial colocada a lo largo del borde inferior de la barra de estado y la barra de navegación. La posición de la guía de diseño superior depende de la presencia o ausencia de una barra de estado y una barra de navegación en la parte superior.

Adding Vertical Spacing to Top Layout GuideAdding Vertical Spacing to Top Layout GuideAdding Vertical Spacing to Top Layout Guide

El campo de texto ahora debe estar anclado en la parte superior de la vista. Como se esperaba, Xcode nos dice que el campo de texto no tiene suficientes restricciones para describir inequívocamente su posición.

Adding a ConstraintAdding a ConstraintAdding a Constraint

Selecciona el campo de texto, presiona Control y arrastra a la etiqueta a la izquierda del campo de texto. En el menú, selecciona Espaciado horizontal. Repite este paso para la etiqueta a la derecha del campo de texto. Casi estamos allí.

Adding More ConstraintsAdding More ConstraintsAdding More Constraints

Para establecer la altura de la etiqueta como fija, selecciona el campo de texto, presiona Control y arrastra desde la parte superior del campo de texto hasta la parte inferior del campo de texto. Selecciona Altura del menú que aparece. Esto define una restricción sobre el campo de texto en sí, su altura.

Fixing the Height of the Text FieldFixing the Height of the Text FieldFixing the Height of the Text Field

Estoy seguro de que aceptas que los conceptos básicos de Diseño Automático son fáciles de entender. A veces puede ser bastante complicado. Lo que cubrimos hasta ahora son los conceptos básicos del Auto Layout flexionando sus músculos. Terminemos este tutorial mirando un problema muy común que se resuelve fácilmente con el Diseño automático.

Más restricciones

No es raro que desees una subvista para abarcar el ancho y alto de su vista padre. Por ejemplo, una vista de tabla a menudo tiene el mismo tamaño que su vista padre. Veamos cómo podemos manejar esto usando el diseño automático.

Agrega una vista de la Biblioteca de objetos a la vista del controlador de vista. Abre el Inspector de atributos y establece el fondo de la vista en azul para asegurarte de que se destaque. Ejecuta la aplicación en un simulador de iPad para ver con qué estamos empezando.

Adding a Blue SubviewAdding a Blue SubviewAdding a Blue Subview

Puedes presionar Comando + Flecha izquierda o Comando + Flecha derecha para girar el dispositivo. Parece que la vista mantiene su ancho y alto, pero está pegada a la esquina superior izquierda. El objetivo es que abarque el ancho y alto de su vista padre. Selecciona la vista azul y agrega las siguientes restricciones usando el menú Pin.

Add Four Constraints to the Blue ViewAdd Four Constraints to the Blue ViewAdd Four Constraints to the Blue View

Antes de hacer clic en Agregar 4 restricciones, asegúrate de agregar las restricciones en relación con la vista superior de la vista azul. ¿Qué significa eso? Una restricción describe una relación entre dos vistas. Estás a punto de aplicar estas restricciones a la vista azul en relación con sus hermanos más cercanos. Lo que queremos, sin embargo, es agregar restricciones que definan la posición de la vista azul en relación con su vista padre o de contenido. Especifica qué vista define la restricción haciendo clic en el pequeño triángulo al lado del número (que define la constante de la restricción). Echa un vistazo a la siguiente captura de pantalla para aclarar.

Specifying the Constrained ViewsSpecifying the Constrained ViewsSpecifying the Constrained Views

Verifica dos veces que cada restricción se aplique a la vista azul y a su vista padre o que contenga la vista. Cuando estés listo, agrega las cuatro restricciones.

En lugar de líneas azules, probablemente estés viendo líneas naranjas con números. En Xcode, naranja significa advertencia. Las líneas naranjas te advierten que la posición actual de la vista azul no está alineada con la posición de la vista azul en tiempo de ejecución. ¿Has notado las líneas discontinuas naranjas en los bordes en la vista padre de la vista azul? Esas líneas punteadas simbolizan el marco de la vista azul si las restricciones que acabas de aplicar están en vigor. Eso sucede en tiempo de ejecución.

Orange Means WarningOrange Means WarningOrange Means Warning

Si no me crees, te sugiero que ejecutes la aplicación en el simulador de iPad para que lo revises. La vista azul abarca el ancho y el alto de tu vista principal, incluso si giras el simulador de vertical a horizontal y viceversa.

Las líneas naranjas ocupan innecesariamente el espacio de trabajo y lo que estás viendo no es lo que obtienes en tiempo de ejecución. Es mejor solucionar el problema actualizando el marco de la vista azul. Esto es simple. Selecciona la vista azul y selecciona Actualizar marcos en el menú Resolver problemas de diseño automático en la parte inferior derecha.

Asegúrate de comprender lo que hemos cubierto en este tutorial, porque lo necesitaremos en el resto de esta serie. En el siguiente tutorial, discutiremos las vistas de tabla y aplicaremos algunas de las técnicas discutidas en este tutorial. Para obtener más información sobre el Diseño automático, explora la Guía de diseño automático de Apple.

Conclusión

Decir que el diseño automático es poderoso es insuficiente. Aunque solo hemos arañado la superficie en este tutorial, ahora debes tener una idea de lo que es Auto Layout y lo que puede hacer por ti.

En el resto de esta serie, seguiremos usando el diseño automático. Si te quedas atascado, asegúrate de volver a visitar este tutorial o escríbeme una línea en los comentarios. También puedes comunicarte conmigo en Twitter.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.