Esta é a minha configuração: Eu tenho um UIScrollView
com borda superior, superior e de teste definida como 0. Dentro disso, adiciono um UIStackView
com estas restrições:
stackView.centerYAnchor.constraintEqualToAnchor(selectedContactsScrollView.centerYAnchor).active = true
stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor).active = true
Dentro da visualização da pilha, adiciono algumas visualizações.
Meu problema é que, devido às restrições, a primeira exibição adicionada à exibição em pilha também terá borda inicial = 0.
Quais são as maneiras pelas quais eu poderia adicionar algum preenchimento à primeira exibição? Sem ajustar as restrições da exibição de rolagem.
ios
swift
uiscrollview
uistackview
Adrian
fonte
fonte
Respostas:
A solução que você forneceu não adiciona um preenchimento às suas visualizações no UIStackView (como você queria na pergunta), mas adiciona um líder para o UIStackView.
Uma solução poderia ser adicionar outro UIStackView dentro do seu UIStackView original e dar a liderança a este novo UIStackVIew. Em seguida, adicione suas visualizações a este novo UIStackView.
Dica, você pode fazer isso completamente usando o Interface Builder. Em outras palavras, não há necessidade de escrever código para ele.
fonte
Quando a
isLayoutMarginsRelativeArrangement
propriedade for verdadeira, a exibição da pilha exibirá suas exibições organizadas em relação às margens do layout.Mas isso afeta todas as visualizações organizadas dentro da exibição da pilha. Se você desejar esse preenchimento para apenas uma exibição organizada, precisará usar aninhados
UIStackView
fonte
isLayoutMarginsRelativeArrangement
é um getter, setter élayoutMarginsRelativeArrangement
. Não consigo editar a respostalayoutMarginsRelativeArrangement
. Documentação oficial: developer.apple.com/reference/uikit/uistackview/...stackView.layoutMargins = UIEdgeInsetsMake(0, 20, 0, 20); [stackView setLayoutMarginsRelativeArrangement:YES];
Eu descobri que as restrições não funcionam dentro de um Stack View, ou parecem um pouco estranhas.
(Por exemplo, se eu adicionar restrição à esquerda / à direita à selecionada no stackview da imagem, isso também adicionará à vista à coleção, mas não à direita; e será um conflito, com certeza).
Para definir margens de layout para todas as visualizações dentro da pilha, selecione:
Stack View > Size Inspector > Layout Margins > Fixed
Nota: a
"Fixed"
opção foi chamada anteriormente"Explicit"
, como visto nas capturas de tela.Em seguida, adicione seu preenchimento:
fonte
O que funcionou para mim é adicionar à exibição em pilha outro UIView que seja apenas um espaçador (funciona pelo menos com stackView.distribution = .Fill):
fonte
swift 3: você só precisa definir o deslocamento por:
Certifique-se de que essa restrição seja definida após você
parentView.addArrangdSubView(firstView)
fonte
Se você precisar apenas de preenchimento à esquerda, defina o Alinhamento da visualização da pilha como "Trailing" e estará livre para especificar restrições de Leading exclusivas em cada uma de suas sub-visões contidas.
Como bônus, você também pode definir o alinhamento da visualização da pilha como "Centro" e, em seguida, usar as restrições à esquerda e / ou à direita para dar a cada item seu próprio preenchimento nos dois lados.
fonte
Esta pergunta já tem boas respostas. Porém, uma sugestão, use a
spacing
propriedade para definir o espaçamento entre as visualizações. Para a primeira e a última visualizações, pode haver duas opções: definir inserções como o @tolpp sugeriu ou adicionar restrições anexadas ao pai (stackview) com constante para adicionar preenchimento.fonte
O que fizemos foi adicionar componentes transparentes (por exemplo, UIButton / UIView) como o primeiro e o último filho do UIStackView. Em seguida, defina restringir a largura desses filhos invisíveis para ajustar o preenchimento.
fonte
A solução seria ter uma exibição regular na exibição da pilha para armazenar as visualizações às quais você deseja adicionar restrições e, em seguida, você pode adicionar restrições para os itens que são relativos às exibições na exibição da pilha. Dessa forma, suas visualizações originais podem ter restrições iniciais e finais na visualização de pilha.
Isso pode ser feito no construtor de interface e programaticamente.
fonte
Parece que a solução foi bem simples. Ao invés de:
Eu acabei de escrever:
fonte