guide español developer apple adaptive iphone ios autolayout

iphone - español - constraints swift



AutoLayout: Centra verticalmente dos UIViews en una vista de supervisión que puede cambiar el tamaño (4)

De acuerdo con rdelmar. Aquí hay otra opción si desea conservar la jerarquía de vistas.

Actualmente estás espaciando los botones en la parte superior e inferior usando restricciones. En su lugar, cree dos UIView vacíos, se utilizarán como espaciadores. Deben colocarse uno en la parte superior y otro en la parte inferior de los botones. Al usar las restricciones de reproducción automática, asegúrese de que la altura de estas dos vistas espaciadoras sea siempre igual. Asegúrese de que estén sujetos a la parte superior e inferior de los botones y la parte superior e inferior de la vista de supervisión, respectivamente.

En VFL: V:|-[spacer1(==spacer2)]-[button1]-(20)-[button2]-[spacer2(==spacer1)]-| .

Puede que tenga que hacer esto en código, no estoy seguro de si IB puede hacerlo.

Tengo dos UIButtons, uno encima del otro, en una vista superior cuya altura se puede cambiar de tamaño. Los dos botones deben tener un espaciado vertical constante entre ellos, pero el espaciado superior e inferior debe redimensionarse de modo que los dos botones permanezcan centrados en la vista de supervisión mientras se redimensiona.

Intenté crear dos restricciones menores o iguales (con igual prioridad) en el espaciado de la supervisión para cada botón, así como un espaciado vertical constante entre los botones, como se muestra a continuación:

(La razón por la que es menos o igual aquí es porque esta vista se define a la altura dada en IB para pantallas de 4 ", pero puede reducirse para pantallas de 3,5"). Sin embargo, esto no funciona. Como se puede ver en la captura de pantalla mientras se ejecuta la aplicación:

Es casi como si quisiera poder decirle a AutoLayout que las dos restricciones en sí mismas deberían tener valores iguales, incluso si ambas están configuradas en "menor que o igual". ¿Hay alguna forma de hacer lo que estoy tratando de hacer, o tal vez de una mejor manera?


Esto es tan trivial de hacer en IB.

1) ⌃ arrastre desde el botón 1 hasta arriba. Seleccione "centrar horizontalmente en contenedor".

2) ⌃ arrastre desde el botón 1 a la izquierda. Seleccione "centrar verticalmente en el contenedor".

3) haz lo mismo con button2.

4) ahora lo único que queda por hacer es ajustar el tamaño de los botones porque así es como se ve.

Esto también es muy trivial.

5) ⌃ arrastre desde el botón 1 hacia la izquierda. Seleccione "espacio inicial al margen del contenedor".

6) ⌃ arrastre desde el botón 1 a la derecha. seleccione "espacio al final del contenedor".

7) hacer exactamente lo mismo con button2.

El producto terminado, se ve así (NB, no los centré, pero podría tener bastante):


Una forma de lograr esto es encerrar los dos botones en otra vista UIV y centrar esa vista en la vista del controlador. Asigne a los botones una distancia fija hasta la parte superior e inferior de esta vista, y una distancia fija entre ellos o una altura fija para la vista.


La forma más sencilla de centrar verticalmente es agregar una restricción NSLayoutAttributeCenterY , preferiblemente al elemento que está cerca del centro de la vista. Y si todas las vistas tienen restricciones de espacio vertical, entonces todas estarán centradas. No es necesario muck con la jerarquía de vistas o agregar vistas de espaciador.

[self.view addConstraint: [NSLayoutConstraint constraintWithItem:button2 attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]];

Si necesita ajustar la posición, establezca la constante. Por ejemplo: constant:-30 lo moverá hacia arriba 30 puntos.

También puede anclar elementos basados ​​en diferentes áreas lógicas de la vista. Por ejemplo, si desea anclar su primer botón al 25% de la altura de la vista, puede configurar el multiplicador a 0.5 .