Pergunta

No iOS6, estou usando layouts automáticos.

  • Tenho 2 visualizações v1 e v2 criadas programaticamente.
  • v2 é adicionado como uma subvisualização de v1
  • As restrições para v1 já foram criadas programaticamente (não mostradas aqui).
  • Quero que v1 e v2 tenham o mesmo tamanho e quero que v2 seja colocado em cima de v1 exatamente no centro horizontal e vertical, de modo que v2 esteja exatamente em cima de v1

Pergunta:

  • Como posso conseguir isso (de preferência usando formato visual; se não for possível, você pode sugerir uma abordagem alternativa)?

Código - Abaixo está minha tentativa, mas ela não fornece a saída desejada.- Nenhum erro lançado.V1 está colocado corretamente, mas V2 está no canto esquerdo de V1

Nota - expliquei abaixo nos comentários o que estou tentando fazer.

[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];
Foi útil?

Solução

Não deveria apenas isso funcionar?

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];

O que isso faz é fazer com que v2 estique sua altura e largura até o tamanho de sua supervisão, que neste caso é v1 e o posiciona de forma que fique bem no topo de sua supervisão também.

Parece que no seu caso você não precisa alinhar a visualização centerX e centerY.Caso contrário, não estou entendendo corretamente o contexto da sua pergunta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top