formato visual do ios autolayout - alinhamento
-
12-12-2019 - |
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];
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