在UIStackView中对UILabels的隐藏属性进行动画处理会导致不同的动画

Cas*_*sse 5 animation ios animatewithduration uistackview

UIStackView使用UIView的hidden属性可以非常轻松地创建精美的动画。我有两个UIStackViews每个UILabelsarrangedSubviews当我添加一个新UILabelUIStackView,它应该出现在正确的索引处的标签的动画呈现它,推它上面和下面的标签。

使用UIStackViews以下效果很容易做到:

descriptionLabel.hidden = true 

let count = descriptionStack.arrangedSubviews.count
descriptionStack.insertArrangedSubview(expenseLabel.descriptionLabel, atIndex: count - 1)

UIView.animateWithDuration(0.5) {
  descriptionLabel.hidden = false
}
Run Code Online (Sandbox Code Playgroud)

我想同时针对两个不同的对象执行此效果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
  }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,costLabel正确设置了动画效果,而descriptionLabel从的顶部插入UIStackView。反转顺序会导致costLabel插入并descriptionLabel正确设置动画。

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

进行以下操作会导致costLabel插入并descriptionLabel正确设置动画:

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

UIView.animateWithDuration(0.5) {
  costLabel.hidden = false
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么动画总是彼此不同。如何同时对两个标签进行动画处理,以及如何将标签按正确的索引显示在上方和下方?

sha*_*rst 5

我有完全一样的问题。我发现设置 的Content Mode属性UILabel似乎改变了UIView动画的执行方式。就我而言,我想实现从上到下的动画。默认动画是从左侧滑入并调整大小。设置内容模式Top对我有用。

也许这有帮助。