UIStackView中UILabels上的隐藏属性动画会导致不同的动画

UIStackView使用UIView的hidden属性创建一个漂亮的动画非常容易。 我在UIStackViews有两个UIStackViews每个都有UILabel ,当我向UIStackView添加一个新的UILabel ,它应该显示一个出现在正确索引处的标签动画,并在其上方和下方推动标签。

使用UIStackViews很容易做到这个效果:

 descriptionLabel.hidden = true let count = descriptionStack.arrangedSubviews.count descriptionStack.insertArrangedSubview(expenseLabel.descriptionLabel, atIndex: count - 1) UIView.animateWithDuration(0.5) { descriptionLabel.hidden = false } 

我想同时为两个不同的UIStackViews做这个效果,但这会导致一些奇怪的行为,其中一个是正确的动画,而另一个是从视图的顶部插入。 假设上面的代码可以重复某些其他视图并创建相同的动画:

 descriptionLabel.hidden = true costLabel.hidden = true let count = descriptionStack.arrangedSubviews.count descriptionStack.insertArrangedSubview(expenseLabel.descriptionLabel, atIndex: count - 1) costStack.insertArrangedSubview(expenseLabel.costLabel, atIndex: count - 1) UIView.animateWithDuration(0.5) { descriptionLabel.hidden = false UIView.animateWithDuration(0.5) { costLabel.hidden = false } } 

在此示例中, costLabel已正确costLabel动画,而descriptionLabel则从UIStackView的顶部UIStackViewcostLabel订单会导致costLabel进入并且descriptionLabel正确地设置动画。

我尝试过这个动画代码的变体,例如没有嵌套动画和使用UIView.animateKeyframesWithDuration

如下所示,导致costLabel进入并且descriptionLabel正确地设置动画:

 UIView.animateWithDuration(0.5) { descriptionLabel.hidden = false } UIView.animateWithDuration(0.5) { costLabel.hidden = false } 

我无法弄清楚为什么动画总是彼此不同。 如何同时为两个标签设置动画并使其在正确的索引处显示效果,将标签推到上方和下方?

我也有完全一样的问题。 我发现设置UILabelContent Mode属性似乎改变了UIView动画的执行方式。 在我的情况下,我想从上到下实现动画。 默认动画是左侧的幻灯片和resize。 将Content Mode设置为Top为我工作。

也许这有帮助。