¡MIRA, SIN ESPACIADORES!
Según las sugerencias en la sección de comentarios de mi respuesta original, especialmente las sugerencias útiles de @ Rivera, he simplificado mi respuesta original.
Estoy usando gifs para ilustrar cuán simple es esto. Espero que encuentres los gifs útiles. En caso de que tenga un problema con los gifs, he incluido la respuesta anterior a continuación con capturas de pantalla simples.
Instrucciones:
1) Agregue sus botones o etiquetas. Estoy usando 3 botones.
2) Agregue una restricción centro x de cada botón a la supervista:
3) Agregue una restricción de cada botón a la restricción de diseño inferior:
4) Ajuste la restricción agregada en el # 3 anterior de la siguiente manera:
a) seleccione la restricción,
b) elimine la constante (establecida en 0),
c) cambie el multiplicador de la siguiente manera: tome el número de botones + 1, y comience en la parte superior, configure el multiplicador como buttonCountPlus1: 1 , y luego buttonCountPlus1 : 2 , y finalmente buttonCountPlus1: 3 . (Explico de dónde obtuve esta fórmula en la respuesta anterior a continuación, si está interesado).
5) ¡ Aquí hay una demo en ejecución!
Nota: Si sus botones tienen alturas más grandes, deberá compensar esto en el valor constante ya que la restricción es desde la parte inferior del botón.
Vieja respuesta
A pesar de lo que dicen los documentos de Apple y el excelente libro de Erica Sadun ( Auto Layout Demystified ), es posible espaciar uniformemente las vistas sin espaciadores. Esto es muy simple de hacer en IB y en código para cualquier número de elementos que desee espaciar de manera uniforme. Todo lo que necesita es una fórmula matemática llamada "fórmula de sección". Es más sencillo de hacer que de explicar. Haré lo mejor que pueda al demostrarlo en IB, pero es igual de fácil hacerlo en código.
En el ejemplo en cuestión, usted
1) comience configurando cada etiqueta para que tenga una restricción central. Esto es muy sencillo de hacer. Simplemente controle el arrastre desde cada etiqueta hasta la parte inferior.
2) Mantenga presionada la tecla Mayús, ya que también podría agregar la otra restricción que vamos a utilizar, a saber, la "guía de diseño de espacio inferior a inferior".
3) Seleccione la "guía de diseño de espacio inferior a inferior" y "centrar horizontalmente en el contenedor". Haga esto para las 3 etiquetas.
Básicamente, si tomamos la etiqueta cuya coordenada deseamos determinar y la dividimos por el número total de etiquetas más 1, entonces tenemos un número que podemos agregar a IB para obtener la ubicación dinámica. Estoy simplificando la fórmula, pero podría usarla para establecer el espaciado horizontal o tanto vertical como horizontal al mismo tiempo. ¡Es súper poderoso!
Aquí están nuestros multiplicadores.
Etiqueta1 = 1/4 = .25,
Etiqueta2 = 2/4 = .5,
Etiqueta3 = 3/4 = .75
(Editar: @Rivera comentó que simplemente puede usar las proporciones directamente en el campo multiplicador, ¡y xCode con hacer los cálculos!)
4) Entonces, seleccionemos Label1 y seleccione la restricción inferior. Me gusta esto:
5) Seleccione el "Segundo elemento" en el Inspector de atributos.
6) En el menú desplegable, seleccione "Invertir primer y segundo elemento".
7) Ponga a cero la constante y el valor de wC hAny. (Puede agregar un desplazamiento aquí si lo necesita).
8) Esta es la parte crítica: en el campo multiplicador agregue nuestro primer multiplicador 0.25.
9) Mientras está en él, configure el "primer elemento" superior en "CenterY" ya que queremos centrarlo en el centro y de la etiqueta. Así es como debería verse todo eso.
10) Repita este proceso para cada etiqueta y conecte el multiplicador relevante: 0.5 para Label2 y 0.75 para Label3. ¡Aquí está el producto final en todas las orientaciones con todos los dispositivos compactos! Súper simple He estado buscando muchas soluciones que involucran resmas de código y espaciadores. Esta es de lejos la mejor solución que he visto sobre el tema.
Actualización: @kraftydevil agrega que la guía de diseño inferior solo aparece en los guiones gráficos, no en xibs. Use 'Espacio inferior al contenedor' en xibs. ¡Buena atrapada!