2017-02-27 5 views
0

So habe ich eine vertikale Stapelansicht in einem einfachen Layout. Wenn ich eine Ansicht über den Interface Builder hinzufüge, sehe ich in der Ansicht in der Stapelansicht keine Probleme.Programmgesteuertes Hinzufügen von Ansichten zu vertikaler Stapelansicht bricht Einschränkungen der vertikalen Stapelansicht auf

Just adding a "Blue" view to UIStackView

Als ich dann Blick auf die UIStackView hinzufügen programmatisch bricht es die Zwänge und die hinzugefügten Ansichten am oberen Rand des Fensters angezeigt. Ich bin verwirrt, warum es die Beschränkungen der Stapelansicht brechen würde.

func buildCats(theJson:JSON){ 
    //self.verticalStack.subviews.forEach({ $0.removeFromSuperview() }) 
    print(theJson) 
    if let infos = self.swiftyJsonvar["info"].array{ 
     for info in infos{ 
      guard let v = UINib(nibName: "ticketOrderView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as? UIView else { return } 
      v.translatesAutoresizingMaskIntoConstraints = false 
      self.verticalStack.addArrangedSubview(v) 

     } 
    } 
} 

As you can see the added view show up WAY Outside of the vertical stack view..

+0

Ich denke, es liegt wahrscheinlich daran, dass Sie das automatische Layout für die Ansichten mit dieser Zeile deaktivieren: 'v.translateAutoresizingMaskIntoConstraints = false'. Obwohl die Stapelansicht ein automatisches Layout hat, haben die neuen Ansichten keine –

+0

Ich habe kein Auto-Layout auf den Ansichten, die ich über IB eingegeben habe. Es ist nur von der Stackview betreut. Ich habe diese Zeile entfernt und auch versucht, sie auf TRUE zu setzen und jedes Mal dasselbe Verhalten zu erhalten. – BostonMacOSX

+0

Gibt es einen bestimmten Grund, warum Sie keine Tabellenansicht dafür verwenden? Sie könnten einfach eine Tabellenzelle mit eigenen Einschränkungen entwerfen –

Antwort

0

Die zusätzlichen Subviews Einschränkungen müssen, da sie keine eigene Größe haben. Versuchen:

v.heightAnchor.constraint (greaterThanOrEqualToConstant: 30) .isActive = true v.widthAnchor.constraint (greaterThanOrEqualToConstant: 200) .isActive = true

Hmmm .... ich zu zweifeln dies jetzt ... Ich vermute, dass das Problem mit dem Hinzufügen der Ansichten in einem Hintergrundthread verbunden sein kann. Vielleicht die Schleife auf dem Hauptthread ausführen?

Edit 2: Ah ... das Problem, das ich jetzt bin Wetten bezieht sich auf das, was Sie mit dem Blick tust/Subviews in Ihrem "ticketOrderView"

Ein Beispiel finden Sie unter: https://github.com/DonMag/ScratchPad

Verwandte Themen