Adicionar subviews programaticamente a um UIStackView
Estou tentando implementar uma célula de exibição de tabela que exibe uma série de ícones que representam comodidades domésticas (por exemplo, toalhas, wifi, lavanderia etc.). A célula pode potencialmente exibir um grande número de comodidades (dependendo da quantidade de residências); portanto, exibirei no máximo três e indicarei que você pode ver mais clicando na célula se houver mais de três. Aqui está como deve ser (no aplicativo do Airbnb):
Estou tentando fazer isso adicionando dinamicamente UIImageViews a um UIStackView na célula de exibição de tabela. Estou usando um UIStackView com alinhamento definido como "Preenchimento" e distribuição definida como "Espaçamento igual", com a idéia de que a exibição da pilha espaçará os ícones de maneira uniforme, independentemente de quantos eu adicionar a ela.
Eu configurei a visualização de pilha no Storyboard. Possui restrições nas partes superior, inferior, esquerda e direitamargens de sua visualização de conteúdo, para que ela preencha a célula da visualização de tabela, até as margens.
Aqui está o código que estou usando para tentar adicionar dinamicamente UIImageViews à célula. Notaamenities
é uma matriz de cadeias iguais aos nomes dos ícones na minha pasta de ativos de imagem:
cell.stackView.backgroundColor = UIColor.greenColor()
var i = 0
while (i < amenities.count && i < 4) {
if (i < 3) {
let imageView = UIImageView(image: UIImage(named: amenities[i]))
imageView.contentMode = .ScaleAspectFit
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.backgroundColor = UIColor.blueColor()
// Add size constraints to the image view
let widthCst = NSLayoutConstraint(item: imageView, attribute: NSLayoutAttribute.Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 50)
imageView.addConstraint(widthCst)
// Add image view to stack view
cell.stackView.addSubview(imageView)
} else {
// Add a label to the stack view if there are more than three amenities
let label = UILabel()
label.text = "\(amens.count - i) more"
label.textAlignment = NSTextAlignment.Left
cell.stackView.addSubview(label)
}
i++
}
Os planos de fundo das visualizações da imagem são azuis e a cor de plano de fundo da visualização da pilha é verde. Aqui está o resultado, para um caso em que a casa possui três comodidades:
Parece que todas as visualizações de imagem estão sendo empurradas uma sobre a outra à esquerda da tela. Eles também preenchem a exibição de conteúdo da célula de cima para baixo, mesmo que a exibição de pilha esteja fixada nas margens da exibição de conteúdo. Não há verde à vista; portanto, parece que a exibição da pilha não permanece fixada nas margens da célula.
Alguma idéia do que há de errado aqui?