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

问题描述:

UIStackView使用UIView的隐藏属性很容易创建一个很好的动画。我有两个UIStackViews,每个UILabelsarrangedSubviews中,当我将一个新的UILabel添加到UIStackView时,它应该显示一个标签出现在正确索引处的动画,并将标签推到其上下。在UIStackView中动画UILabels上的隐藏属性会导致不同的动画

这种效果是非常容易使用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正确动画,而descriptionLabelUIStackView的顶部下降英寸反转订单会导致costLabel进入并且descriptionLabel正确地进行动画。

我试过这个动画代码的变体,例如不嵌套动画并使用UIView.animateKeyframesWithDuration

下面做,导致costLabel砸在和descriptionLabel正确动画:

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

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

我想不通为什么动画总是彼此不同。如何同时为两个标签设置动画效果并使其显示在正确的索引位置,并将标签上下推?

我有完全相同的问题。我发现设置UILabelContent Mode属性似乎改变了UIView动画的执行方式。在我的情况下,我想实现从上到下的动画。默认动画是从左侧滑入并重新调整大小。设置内容模式为Top为我工作。

也许没有什么帮助。

+0

改变'Content Mode'对'UILabel'的动画方式有明显的影响,但看起来并不一致。将它设置为'.Left'会使标签“下拉”,但将其设置为'.Right'使其显示在视图的左侧。 从侧面看,它至少看起来更好看,谢谢! – Casse