Tentei alterar o UIStackView
plano de fundo de claro para branco no inspetor do Storyboard, mas ao simular, a cor do plano de fundo da exibição da pilha ainda tem uma cor clara.
Como posso alterar a cor de fundo de a UIStackView
?
ios
swift
uistackview
LukasTong
fonte
fonte
Respostas:
Referência AQUI .
EDITAR:
Você pode adicionar um subView
UIStackView
como mencionado AQUI ou nesta resposta (abaixo) e atribuir uma cor a ele. Confira abaixoextension
para isso:E você pode usá-lo como:
fonte
drawRect()
é chamado. Você pode simplesmente testar por subclasseUIStackView
if let backgroundView = self.subviews.first(where: {$0.tag == 123}) {
. Nesse caso, altero a cor de fundo dessa exibição.Eu faço assim:
Funciona como um encanto
fonte
@IBDesignable class StackView
O que permitirá que você crie no Storyboard . Não me importo muito em adicionar um plano de fundo em tempo de execução, mas é muito difícil projetar o stackview quando ele não possui cores noUIStackView
é um elemento que não é de renderização e, como tal, não é desenhado na tela. Isso significa que mudarbackgroundColor
essencialmente não faz nada. Se você quiser alterar a cor do plano de fundo, basta adicionar umUIView
a ela como uma subvisão (que não está organizada) como abaixo:fonte
Talvez a maneira mais fácil, mais legível e menos invasiva seja incorporar o
UIStackView
aoUIView
e definir a cor do plano de fundo para a exibição.E não se esqueça de configurar corretamente as restrições de Layout automático entre essas duas visualizações ... ;-)
fonte
Pitiphong está correto, para obter um stackview com uma cor de fundo, faça algo como o seguinte ...
Isso fornecerá uma stackview cujo conteúdo será colocado em um fundo vermelho.
Para adicionar preenchimento ao stackview para que o conteúdo não fique alinhado com as bordas, adicione o seguinte no código ou no storyboard ...
fonte
TL; DR: A maneira oficial de fazer isso é adicionando uma exibição vazia na exibição de pilha usando o
addSubview:
método e defina o fundo da exibição adicionada.A explicação: UIStackView é uma subclasse UIView especial que apenas faz o layout não desenhar. Muitas de suas propriedades não funcionarão normalmente. E como o UIStackView fará o layout apenas de suas subvisões organizadas, isso significa que você pode simplesmente adicionar um UIView com o
addSubview:
método, definir suas restrições e cor de fundo. Esta é a maneira oficial de alcançar o que você deseja citar da sessão da WWDCfonte
Isso funciona para mim no Swift 3 e iOS 10:
fonte
No iOS10, a resposta do @ Arbitur precisa de um setNeedsLayout após a definição da cor. Esta é a mudança necessária:
fonte
backgroundColor
antes de adicioná-lo a umsuperview
funciona no ios10 e ios9, no entanto, se você atualizou obackgroundColor
após alayoutSubviews()
função ter sido chamada, ele simplesmente não atualizariabackgroundColor
obackgroundLayer
significado de nenhuma atualização visual. Corrigido agora, obrigado por apontar.Aqui está uma breve visão geral para adicionar uma cor de fundo da exibição Pilha.
Criando vista de plano de fundo com cantos arredondados
Para fazer com que apareça como plano de fundo, nós o adicionamos à matriz de subvisões da visualização da pilha raiz no índice 0. Isso o coloca atrás das visualizações organizadas da visualização da pilha.
Adicione restrições para fixar o backgroundView nas bordas da exibição da pilha, usando uma pequena extensão no UIView.
chame o
pinBackground
deviewDidLoad
Referência: AQUI
fonte
Você pode fazer uma pequena extensão de
UIStackView
Uso:
fonte
Xamarin, versão C #:
fonte
fonte
Subclasse UIStackView
Então na sua aula
fonte
Você pode inserir uma subcamada no StackView, funciona para mim:
fonte
Sou um pouco cético em relação aos componentes de subclassificação da interface do usuário. É assim que eu estou usando,
E este é o uso,
Nota: Com essa abordagem, se você deseja definir uma borda, é necessário definir
layoutMargins
no stackView para que a borda fique visível.fonte
Você não pode adicionar plano de fundo ao stackview. Mas o que você pode fazer é adicionar o stackview em uma exibição e, em seguida, definir o plano de exibição, isso fará o trabalho. * Não interromperá os fluxos do stackview. Espero que isso ajude.
fonte
Podemos ter uma classe personalizada
StackView
como esta:E pode ser usado assim:
Isso é um pouco melhor do que adicionar uma função de extensão,
func addBackground(color: UIColor)
conforme sugerido por outras pessoas. A exibição em segundo plano é lenta, para que não seja criada até que você efetue a chamadastackView.backgroundView.backgroundColor = ...
. E definir / alterar a cor do plano de fundo várias vezes não resultará na inserção de várias subvisões na exibição da pilha.fonte
Se você deseja controlar a partir do próprio designer, adicione esta extensão à exibição de pilha
fonte
Você poderia fazer assim:
Fornecendo uma extensão para substituir
backgroundColor
:fonte
Experimente o BoxView . É semelhante ao UIStackView, mas é renderizado e suporta mais opções de layout.
fonte