UIStackView
usa restrições internamente para posicionar suas subvisões organizadas. Exatamente quais restrições são criadas depende de como a própria exibição da pilha está configurada. Por padrão, uma exibição de pilha criará restrições que exibem suas subvisões organizadas em uma linha horizontal, fixando as vistas iniciais e finais às suas próprias arestas iniciais e finais. Portanto, seu código produziria um layout parecido com este:
|[view1][view2]|
O espaço alocado para cada subvisão é determinado por vários fatores, incluindo o tamanho do conteúdo intrínseco da subvisão e sua resistência à compactação e prioridades de abrangência de conteúdo. Por padrão, as UIView
instâncias não definem um tamanho de conteúdo intrínseco. Isso geralmente é fornecido por uma subclasse, como UILabel
ou UIButton
.
Como a resistência à compactação de conteúdo e as prioridades de abrangência de conteúdo de duas novas UIView
instâncias serão as mesmas, e nenhuma visualização fornece um tamanho intrínseco de conteúdo, o mecanismo de layout deve adivinhar qual tamanho deve ser alocado para cada visualização. No seu caso, ele está atribuindo a primeira visualização 100% do espaço disponível, e nada para a segunda visualização.
Se você modificar seu código para usar UILabel
instâncias, obterá melhores resultados:
UILabel *label1 = [UILabel new];
label1.text = @"Label 1";
label1.backgroundColor = [UIColor blueColor];
UILabel *label2 = [UILabel new];
label2.text = @"Label 2";
label2.backgroundColor = [UIColor greenColor];
[self.stack1 addArrangedSubview:label1];
[self.stack1 addArrangedSubview:label2];
Observe que não é necessário criar explicitamente nenhuma restrição. Esse é o principal benefício do uso UIStackView
- oculta os detalhes (geralmente feios) do gerenciamento de restrições do desenvolvedor.