2017-02-27 109 views
0

所以我有一個簡單佈局的垂直堆棧視圖。當我通過Interface Builder添加視圖時,我在堆棧視圖中看到視圖沒有問題。編程添加視圖到垂直堆棧視圖打破垂直堆棧視圖的約束

Just adding a "Blue" view to UIStackView

當我再編程方式添加欣賞到UIStackView它打破了制約和補充意見出現在窗口的頂部。我很困惑,爲什麼它會打破堆棧視圖的約束。

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

我認爲這可能是因爲你正在禁用該行的視圖的自動佈局:'v.translatesAutoresizingMaskIntoConstraints = false'。因此,儘管堆棧視圖具有自動佈局,但新視圖不需要 –

+0

我對通過IB放置的視圖沒有自動佈局。它只是由堆棧視圖來處理。 我刪除了該行,並試圖將其設置爲TRUE,並且每次都獲得相同的行爲。 – BostonMacOSX

+0

有沒有一個特定的原因,爲什麼你不使用tableview呢?你可以用它自己的約束來設計一個表格單元格 –

回答

0

添加的子視圖需要限制,因爲它們沒有固有大小。嘗試:

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

嗯....我懷疑這現在...我懷疑這個問題可能與在後臺線程中添加視圖有關。也許在主線程上運行循環?

編輯2:啊......現在我打賭這個問題是關係到你的觀點做什麼/你的「ticketOrderView」

舉一個例子裏面的子視圖,請參見:https://github.com/DonMag/ScratchPad