[iphone] Diseño automático (Restricciones) Centre 2 vistas una al lado de la otra en una vista principal



3 Answers

Descubrí una forma sin agregar otra vista:

 [aView addConstraint:[NSLayoutConstraint constraintWithItem:viewOnLeft attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationLessThanOrEqual toItem:aView attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]];
 [aView addConstraint:[NSLayoutConstraint constraintWithItem:viewOnRight attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationLessThanOrEqual toItem:aView attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]];

También puede cambiar las constantes para crear un espacio entre las vistas.

  • constante de restricción de vista izquierda: -X
  • constante de restricción de vista derecha: +X

Question

Estoy intentando descubrir cómo hacer esto con el diseño automático (iOS6) y las restricciones.

Básicamente tengo mi gran vista dividida en dos secciones en la parte inferior. Dentro de esas secciones (actualmente subvistas) tengo una vista de imagen y una etiqueta. Quiero centrarlos en ambos lados, con texto de longitud variable.

Mi cabeza está principalmente envuelta en el diseño automático, pero no estoy seguro de cuál sea el mejor enfoque para esto. Me inclino a pensar que no es posible en IB, pero está en el código.

Voy a seguir tratando de resolver esto, pero mientras tanto aquí está el ejemplo que intento crear.




Una solución a esto se considera en las conferencias universitarias de stanford sobre ios 7. Funciona maravillosamente. Se adjuntó esta solución. (Aquí sdfssfg ... cosa es etiqueta1 y efsdfg .... cosa es etiqueta2)




Hay varias formas de hacer esto. En términos básicos, aquí está cómo centrar 1..n elementos, suponiendo que todos sus artículos tienen tamaños restringidos y no van a crecer .

  1. Coloque 2 espaciadores en cada lado de sus artículos. Fije los espaciadores a los bordes parentales. Ancla tu primer y último elemento a los anclajes. Finalmente, asigne 1 espaciador para tener el ancho del otro espaciador. No necesita establecer explícitamente ningún tamaño de espaciador, ya que se resolverá .

    • spacer1 -> left = parent: ancho izquierdo = spacer2: ancho
    • spacer2 -> right = parent: right
    • yourFirstItem -> left = spacer1: right
    • yourLastItem -> right = spacer2: izquierda
  2. Si los espaciadores no son lo suyo, y usted y usted tienen un número impar de elementos, centre el centro en el centro del elemento principal. Además, asegúrese de que los elementos primero y último no estén anclados a los bordes principales.

    • yourMiddleItem = centerX = parent: centerX
    • otherItems-> yourMiddleItem <-otherItems
  3. Si los espaciadores no son lo suyo, y tiene un número par de elementos, centre los 2 bordes de los elementos internos en el centro del elemento principal. Además, asegúrese de que los elementos primero y último no estén anclados a los bordes principales.

    • leftMiddleItem -> right = parent: centerX
    • rightMiddleItem -> left = parent: centerX
    • otherItems-> leftMiddleItem rightMiddleItem <-otherItems
  4. También puede centrar un marcador de posición invisible en el centro y anclarlo, pero igual tendrá que considerar una cantidad impar / par de elementos cuando constriñe, así que no recomiendo ese enfoque.




Después de iOS 9, otra opción para lograr esto es usar Stack Views




Related