Анимация скрытого свойства в UILabels в UIStackView вызывает разные анимации

UIStackView позволяет очень легко создать красивую анимацию, используя скрытое свойство UIView. У меня есть два 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
}

Я не могу понять, почему анимации всегда отличаются друг от друга. Как одновременно анимировать обе метки и получить эффект, когда они появляются в правильном индексе, перемещая метки выше и ниже?


person Casse    schedule 06.03.2016    source источник


Ответы (1)


У меня точно такая же проблема. Я обнаружил, что установка свойства Content Mode для UILabel, по-видимому, меняет способ выполнения анимации UIView. В моем случае я хотел добиться анимации сверху вниз. Анимация по умолчанию представляла собой слайд слева в сочетании с изменением размера. Установка Content Mode на Top сработала для меня.

Может быть, это помогает.

person shadowhorst    schedule 20.10.2016
comment
Изменение Content Mode определенно влияет на то, как UILabel анимируется, но это не кажется очень последовательным. Установка его на .Left приводит к тому, что метка раскрывается, но установка на .Right делает ее видимой с левой стороны представления. По крайней мере, со стороны выглядит лучше, спасибо! - person Casse; 19.11.2016