uistackview 中排列的子视图内的动画 "jumps"

Animation within arranged subview in uistackview "jumps"

我有一个水平的 UIStackView,其中包含几个排列好的子视图。

我想在用户单击按钮时删除一个排列的子视图(我们称之为 A),但在此之前我想做一个快速动画。我想做我自己的动画,所以我不能只制作 stackView.removeArrangedSubview 的动画,它会做默认的基本动画,而不是我想要的特殊动画。

在 A 中,我有另一个视图(我们称之为 B),它是使用自动布局的 centeredX 和 centeredY。

当我将 arrangedSubview A 的 A.widthAnchor.constant 设置为 0 时,其他 arrangedsubviews 逐渐取代它,子 B 在动画之前失去其 CenterX 并转到左边。或者它可能不会丢失 centerX,但它在一个微小的 A 上以 centeredX 为中心(宽度 = 0,并从左侧开始),但 A 不应该立即将其宽度设置为 0,而是在动画完成后.. .

我尽我所能解释清楚,但我知道这可能会造成混淆。这是显示问题的视频。图像 (B),在动画开始前位于左侧 arrangedsubview A(占据所有屏幕)"jumps"。

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()

所以现在一切正常:)