Animate hidden property on UILabels in UIStackView causes different animations

折月煮酒 提交于 2019-12-07 06:33:35

问题


UIStackView makes it really easy to create a nice animation using the hidden property of a UIView. I have two UIStackViews each with UILabels in the arrangedSubviews and when I add a new UILabel to a UIStackView, it should present it with an animation of the label appearing at the correct index, pushing the labels above and below it.

This effect is very easy to do using UIStackViews:

descriptionLabel.hidden = true 

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

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

I want to do this effect simultaneously for two different UIStackViews, but this causes some weird behaviour, where one is animated correctly while the other drops in from the top of the view. Assuming that the above code can be repeated for some other view and create the same animation:

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
  }
}

In this example, the costLabel is animated correctly, while descriptionLabel drops in from the top of the UIStackView. Reversing the order causes the costLabel to drop in and descriptionLabel to animate correctly.

I've tried variations of this animation code e.g. not nesting the animations and using UIView.animateKeyframesWithDuration.

Doing it as below, causes the costLabel to drop in and the descriptionLabel to animate correctly:

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

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

I cannot figure out why the animations are always different from each other. How do I animate both labels simultaneously and having the effect where they appear at the correct index, pushing the labels above and below?


回答1:


I have exactly the same problem. I found out that setting the Content Mode property of the UILabel seems to change the way the UIView animation is performed. In my case I wanted to achieve an animation from top to bottom. The default animation was a slide in from left combined with a resize. Setting Content Mode to Top worked for me.

Maybe that helps.



来源:https://stackoverflow.com/questions/35828330/animate-hidden-property-on-uilabels-in-uistackview-causes-different-animations

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!