uistackview中的排列子视图中的动画“跳跃”

问题描述 投票:0回答:1

我有一个包含几个排列的子视图的水平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
    })
ios swift animation uistackview
1个回答
0
投票

我发现自己:实际上,问题在于我做的时候

Stackview.layoutIfNeeded()

stackview中的内容可以动画,但不能是stackview本身。因此stackview在动画开始之前更新了它的宽度。我刚改变

superviewThatContainTheStackView.layoutIfNeeded()

所以现在一切正常:)

© www.soinside.com 2019 - 2024. All rights reserved.