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

时间:2016-03-06 14:52:38

标签: ios animation uistackview animatewithduration

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

使用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已正确设置动画,而descriptionLabel则从UIStackView的顶部开始。撤消订单会导致costLabel放入并descriptionLabel正确设置动画。

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

按以下方式执行操作会导致costLabel放入并descriptionLabel正确设置动画:

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

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

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

1 个答案:

答案 0 :(得分:4)

我有完全相同的问题。我发现设置Content Mode的{​​{1}}属性似乎改变了UILabel动画的执行方式。在我的情况下,我想从上到下实现动画。默认动画是左侧的幻灯片和调整大小。将内容模式设置为UIView对我有用。

也许这有帮助。