Programmgesteuertes Hinzufügen von Unteransichten zu einer UIStackView

Ich versuche, eine Tabellenzelle zu implementieren, in der eine Reihe von Symbolen für die Haushaltsausstattung angezeigt wird (z. B. Handtücher, WLAN, Wäsche usw.). In der Zelle wird möglicherweise eine große Anzahl von Annehmlichkeiten angezeigt (abhängig von der Anzahl der im Haus vorhandenen). Daher werden maximal drei angezeigt, und Sie können mehr anzeigen, indem Sie auf die Zelle klicken, wenn mehr als drei vorhanden sind. So sollte es aussehen (aus der Airbnb-App):

Ich versuche dies, indem ich UIImageViews dynamisch zu einem UIStackView in der Tabellenzelle hinzufüge. Ich verwende eine UIStackView mit Ausrichtung auf "Füllen" und Verteilung auf "Gleicher Abstand". Die Idee ist, dass die Stapelansicht die Symbole gleichmäßig verteilt, unabhängig davon, wie viele sie hinzugefügt werden.

Ich habe die Stapelansicht in Storyboard eingerichtet. Es gibt Einschränkungen für oben, unten, links und rechts Ränder der Inhaltsansicht, sodass die Zelle der Tabellenansicht bis zu den Rändern ausgefüllt wird.

Hier ist der Code, mit dem ich versuche, UIImageViews dynamisch zur Zelle hinzuzufügen. Hinweisamenities ist ein Array von Zeichenfolgen, die den Namen der Symbole in meinem Image-Assets-Ordner entsprechen:

        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++
        }

Die Hintergründe der Bildansichten sind blau und die Hintergrundfarbe der Stapelansicht ist grün. Hier ist das Ergebnis für einen Fall, in dem das Haus drei Annehmlichkeiten hat:

Sieht so aus, als würden alle Bildansichten links auf dem Bildschirm übereinander geschoben. Sie füllen auch die Inhaltsansicht der Zelle von oben nach unten, obwohl die Stapelansicht an den Rändern der Inhaltsansicht angeheftet ist. Da kein Grün in Sicht ist, scheint die Stapelansicht nicht an den Rändern der Zelle angeheftet zu bleiben.

Eine Idee, was hier falsch ist?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage