前言:我看了一眼this post,它並沒有解決我的問題。這是一個link to a repo,顯示我遇到的錯誤。隱藏嵌套UISTackviews的UIStackView
我有一個UIViewController
垂直UIStackView
包含嵌套水平UIStackViews
。
有兩個UIStackViews
是切換。如果顯示UIStackViewNumber1
,則UIStackViewNumber2
隱藏&反之亦然。我最初設置的視圖顯示,但它太擁擠。
UIStackView
stackViewThatDoesntMove
stackViewNumber1
stackViewNumber2
stackViewThatDoesntMove
如果我不隱藏任何東西,一切正常,沒有AutoLayout錯誤。在UIStackViews
的每一個嵌套了包含按鈕,標籤,滑塊,等我發現的觀點是太擁擠stackViews,所以我想我會設置隱藏stackViews之一和動畫的變化,具體如下:
stackViewNumber2.isHidden = true
UIView.animate(withDuration: 0.33,
options: [.curveEaseOut],
animations: {
self.stackViewNumber1.layoutIfNeeded()
self.stackViewNumber2.layoutIfNeeded()
self.view.layoutIfNeeded()
},
completion: nil)
}
雖然我在Simulator和物理設備上獲得了期望的結果,但是當我隱藏其中一個UIStackViews時,我的控制檯填滿了AutoLayout錯誤。
我看了一下this post,我的問題看起來很簡單。我採用最少的「簿記」方法,並在UIView
中包裝stackViewNumber2
。我最終得到的是我原來沒有將stackViewNumber1
包含在UIView
中的一組錯誤。
我也看了Apple's documentation on UIStackView
並試圖玩弄的arrangedSubviews()設置的限制isActive = false
,如下:
for subview in stackViewNumber2.arrangedSubviews {
for constraint in subview.constraints {
constraint.isActive = false
}
}
stackViewNumber2.updateConstraints()
// then run animation block to update view
是否有隱藏嵌套UIStackViews
而不用追加用於約束的IBOutlet
更有效的方式,使確定它不弱,並且對isActive
是否爲true
/false
做記錄?
我認爲我的問題與嵌套stackViews有關,但我無法弄清楚如何解決它。感謝您的閱讀,我歡迎有關如何隱藏包含嵌套UIStackViews
的UIStackView
的建議。
更改動畫塊內的隱藏屬性是否有任何不同的效果。如果需要,離開佈局? – agibson007
@ agibson007感謝您的閱讀。不,它沒有任何不同的效果。 – Adrian
嵌套stackviews包含什麼?他們是否在評估內容大小,還是在設定內容?另外什麼是設置垂直持有水平。試圖描繪它,以及可能會有什麼阻礙。而不是取消激活約束,而不是隱藏內部堆棧視圖如果在動畫塊中隱藏這些堆棧視圖的子視圖會發生什麼情況。 – agibson007