Cuando en lugar de aprender algo siguiendo el ABC te lanzas a trabajar en un proyecto y vas aprendiendo “sobre la marcha” suele pasar que acabas “descubriendo la pólvora” 😉
Pero luego te enteras de que hay muuuucha gente que aún no la ha descubierto, así que ¡compartamos conocimiento!.

Tras muchos proyectos Android uno se acostumbra a aprovechar los distintos tipos de layout. Los relativos, los lineales con “pesos relativos” y demás. Muchas posibilidades para definir una maquetación en la que situar el elemento preciso en la posición precisa y con la potencialidad de decidir si quieres que tenga “una quinta parte del ancho de la pantalla” o “una séptima parte de la altura de la ventana”. Entonces llegas a iOS y todo cambia, llegas a las constraints.

Aunque al principio te parezca una locura, sabes que la gente de Apple no es estúpida así que pones buena voluntad y empiezas. Pronto vas descubriendo que crear layouts a base de constraints es también poderoso y divertido.

Las constraints te permiten alinear elementos, unos respecto a otros o respecto a sus contenedores. Incluso puedes definir la proporción entre ancho y alto de un elemento (aprended, chicos de Google) que obligue a un elemento a ser, por ejemplo, siempre cuadrado. También es fácil hacer que, por ejemplo, haya 3 botones que se adapten automáticamente al ancho ocupando cada uno un tercio: se define el orden relativo entre ellos, se define que el primero se alinee al principio del contenedor, el ultimo al final del contenedor y se define que los tres tengan el mismo ancho. ¡Voila!. Ya somos expertos en autolayout para iOS.

Vamos al lío, cómo maquetar en iOS con medidas relativas. En principio con lo dicho hasta ahora es suficiente para una gran parte del trabajo, pero ¿y qué hay de aquello de hacer que un elemento ocupe “un tercio del alto del popup”?, ¿o que “el botón de la parte inferior mida siempre una cuarta parte de la altura de la pantalla”?. Es una necesidad tan primaria que sorprendía pensar que las constraints no lo permitieran hacer de forma de sencilla.

Y era sencillo, pero no evidente, estuvo siempre a solamente un paso, bastaba hacer doble click sobre cualquier constraint para encontrar el elemento clave, el “Multiplier“:
iOS autoLayout multiplier
Basta usar ese campo para que nuestro botón tenga “el mismo alto” que el contenedor, pero multiplicado por 0,2 (un quinto).

Usándolo también podemos lograr de forma rápida que un botón “Cancelar” ocupe un tercio del ancho mientras el de “Aceptar” ocupa dos tercios. Nuestros layout no solo tendrán cada elemento en su sitio, sino que además se adaptarán correctamente a los distintos tamaños de pantalla.

¿Merece tan poca cosa un post del blog?, cuando ya la sabes, no, no lo merece. Pero si lo hubiera escrito alguien, a mi me habría ahorrado varias horas de ingeniosas soluciones “caseras”.

Espero que leáis esto antes de perder demasiado tiempo. 🙂