![](/img/trans.png)
[英]UIStackView moves it's arranged subviews to top left when all subviews are hidden within an animation block
[英]Animation within arranged subview in uistackview “jumps”
我有一個包含幾個排列的子視圖的水平UIStackView。
我想在用戶點擊按鈕時刪除一個已安排的子視圖(讓我們稱之為A),但就在此之前我想要做一個快速動畫。 我想做自己的動畫,所以我不僅可以動畫制作默認基本動畫的stackView.removeArrangedSubview
,而不是我想要的特殊動畫。
在A中,我有另一個視圖(我們稱之為B),它使用自動布局進行居中X和居中。
當我將被安排的子視圖A的A.widthAnchor.constant設置為0時,其他arrangedsubviews
的子視圖逐漸到達它的位置,孩子B在動畫之前就失去了它的CenterX並向左移動。 或者它可能不會丟失centerX,但它在一個微小的A(寬度= 0,並從左側開始)居中X,但A的寬度不應該立即為0,但在動畫完成后... 。
我盡可能多地嘗試解釋清楚,但我知道這可能令人困惑。 這是顯示問題的視頻。 在動畫開始之前,在arrangedsubview
A(拍攝所有屏幕)中的圖像(B)在左側“跳躍”。
https://drive.google.com/open?id=1nTDRe5zirbuQi86WVBTuU-iDU8aq0lcw
以下是制作此動畫的非常簡單的代碼:
UIView.animate(withDuration:4,delay:0, options:.curveEaseInOut, animations : {
self.c.constant = 0 // c is A.widthAnchor constraint
self.stackView.layoutIfNeeded()
},completion: { _ in
// done
})
我發現自己:實際上,問題在於我做的時候
Stackview.layoutIfNeeded()
stackview中的內容可以動畫,但不能是stackview本身。 因此stackview在動畫開始之前更新了它的寬度。 我剛改變
superviewThatContainTheStackView.layoutIfNeeded()
所以現在一切正常:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.