Pregunta

en iOS6, estoy usando autolayouts.

  • Tengo 2 vistas v1 y v2 creadas programáticamente.
  • v2 se agrega como una subviega a v1
  • Las restricciones para V1 ya se han creado programáticamente (no se muestran aquí).
  • Quiero que V1 y V2 sean del mismo tamaño y quiero que v2 se coloque en la parte superior de V1 exactamente la coincidencia central horizontal y vertical, que v2 esté exactamente en la parte superior de V1

Pregunta:

  • ¿Cómo puedo lograr esto (preferiblemente con formato visual, si no es posible, puede sugerir un enfoque alternativo)?

Code - Dado a continuación es mi intento, pero sin embargo, no proporciona la salida deseada.- No se arrojan errores.V1 se coloca correctamente, pero V2 es una esquina izquierda de V1

nota - He explicado a continuación en los comentarios, lo que estoy tratando de hacer.

[v1 addSubView:v2];

v1.translatesAutoresizingMaskIntoConstraints        = NO;
v2.translatesAutoresizingMaskIntoConstraints        = NO;

NSDictionary *viewDictionary = NSDictionaryOfVariableBindings(v1,
                                                              v2);

//I wanted v1 and v2 to be of the same height and wanted the center Y to be aligned together
NSArray *horizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[v2(==v1)]"
                                                                         options:NSLayoutFormatAlignAllCenterY
                                                                         metrics:nil
                                                                           views:viewDictionary];


//I wanted v1 and v2 to be of the same height and wanted the center X to be aligned together
NSArray *verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[v2(==v1)]"
                                                                       options:NSLayoutFormatAlignAllCenterX
                                                                       metrics:nil
                                                                         views:viewDictionary];

[v1 addConstraints:horizontalConstraints];
[v1 addConstraints:verticalConstraints];

¿Fue útil?

Solución

¿No debería simplemente este trabajo?

NSMutableArray *constraints = [NSMutableArray new];

constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"|[v2]|"
                                                                        options:0
                                                                        metrics:nil
                                                                          views:NSDictionaryOfVariableBindings(v2)];
constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[v2]|"
                                                                        options:0
                                                                        metrics:nil
                                                                          views:NSDictionaryOfVariableBindings(v2)];
[v1 addConstraints:constraints];

¿Qué hace esto es que hace que V2 estire su altura y ancho al tamaño de su Supervisión, que en este caso es V1 y lo posiciona, así que está bien en la parte superior de su supervista también.

Parece que en su caso, no necesita alinear el Centro de View Screx y el Centro.De lo contrario, no estoy entendiendo el contexto de su pregunta correctamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top