我有一个包含几个排列的子视图的水平UIStackView。
我想在用户点击按钮时删除一个已安排的子视图(让我们称之为A),但就在此之前我想做一个快速动画。我想做自己的动画,所以我不仅可以动画制作默认基本动画的stackView.removeArrangedSubview
,而不是我想要的特殊动画。
在A中,我有另一个视图(我们称之为B),它使用自动布局进行居中X和居中。
当我将被安排的子视图A的A.widthAnchor.constant设置为0时,其他arrangedsubviews
逐渐代替它,孩子B在动画之前就失去了它的CenterX并向左移动。或者它可能不会丢失centerX,但它在一个微小的A(宽度= 0,并从左侧开始)居中X,但A的宽度不应该立即为0,但在动画完成后... 。
我尽可能多地尝试解释清楚,但我知道这可能令人困惑。这是显示问题的视频。在动画开始之前,图像(B)位于arrangedsubview
A(拍摄所有屏幕)的左侧“跳跃”。
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()
所以现在一切正常:)