在UIStackView中,对UILabel的隐藏属性进行动画处理会导致不同的动画效果。

5
UIStackView可以很容易地使用UIView的hidden属性创建漂亮的动画。我有两个UIStackViews,每个都有arrangedSubviews中的UILabels,当我向一个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 正确地进行了动画处理,而 descriptionLabelUIStackView 的顶部下降。反转顺序会导致 costLabel 下降,而 descriptionLabel 则正确地进行动画处理。
我已经尝试过这个动画代码的各种变化,例如不嵌套动画并使用 UIView.animateKeyframesWithDuration
按照以下方式进行操作,会导致 costLabel 下降,而 descriptionLabel 将正确地进行动画处理:
UIView.animateWithDuration(0.5) {
  descriptionLabel.hidden = false
}

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

我无法理解为什么这些动画总是不同。我应该如何同时对两个标签进行动画处理,使它们在正确的位置出现,并将标签推到上下方?

1个回答

6
我有完全相同的问题。我发现设置UILabelContent Mode属性似乎会改变UIView动画的执行方式。在我的情况下,我想实现从上到下的动画。默认动画是从左侧滑入并与调整大小结合。将 Content Mode 设置为Top 对我有用。也许这可以帮助你。

改变“内容模式”对“UILabel”的动画效果肯定有影响,但似乎不太一致。将其设置为“.Left”会使标签“下降”,但将其设置为“.Right”会使其从视图的左侧出现。至少从侧面出现看起来更好,谢谢! - Casse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接