У меня есть UITextField, который я хочу увеличить его ширину при нажатии на. Я установил ограничения и убедился, что ограничение слева имеет более низкий приоритет, чем то, которое я пытаюсь анимировать справа.
Вот код, который я пытаюсь использовать.
// move the input box
UIView.animateWithDuration(10.5, animations: {
self.nameInputConstraint.constant = 8
}, completion: {
(value: Bool) in
println(">>> move const")
})
Это работает, но кажется, что это происходит мгновенно, и никакого движения не наблюдается. Я попытался установить 10 секунд, чтобы убедиться, что я ничего не пропустил, но я получил те же результаты.
nameInputConstraint - это имя ограничения, которое я контролирую, перетаскивающего для подключения к моему классу из IB.
Заранее спасибо за помощь!
xcode
swift
constraints
xcode6
icekomo
источник
источник
Ответы:
Вам необходимо сначала изменить ограничение, а затем анимировать обновление.
Swift 2
Свифт 3, 4, 5
источник
self
в затворе.SWIFT 4.x:
Пример с завершением:
источник
Очень важно указать, что это
view.layoutIfNeeded()
относится только к просмотру подпредставлений.Поэтому для анимации ограничения представления важно вызвать его в суперпредставлении «просмотр- анимация» следующим образом:
Пример для простого макета выглядит следующим образом:
источник
С Swift 5 и iOS 12.3, в соответствии с вашими потребностями, вы можете выбрать один из 3 следующих способов для решения вашей проблемы.
# 1. Использование
UIView
«Sanimate(withDuration:animations:)
метод классаanimate(withDuration:animations:)
имеет следующую декларацию:Код Playground ниже показывает возможную реализацию для
animate(withDuration:animations:)
того, чтобы анимировать постоянное изменение ограничения Auto Layout.# 2. Используя
UIViewPropertyAnimator
«ыinit(duration:curve:animations:)
инициализатора иstartAnimation()
методinit(duration:curve:animations:)
имеет следующую декларацию:Код игровой площадки ниже показывает возможную реализацию
init(duration:curve:animations:)
иstartAnimation()
для того, чтобы анимировать постоянное изменение ограничения Auto Layout.# 3. Использование
UIViewPropertyAnimator
«SrunningPropertyAnimator(withDuration:delay:options:animations:completion:)
метод классаrunningPropertyAnimator(withDuration:delay:options:animations:completion:)
имеет следующую декларацию:Код Playground ниже показывает возможную реализацию для
runningPropertyAnimator(withDuration:delay:options:animations:completion:)
того, чтобы анимировать постоянное изменение ограничения Auto Layout.источник
В моем случае я только обновил пользовательский вид.
источник
Смотрите это .
Видео говорит, что вам нужно просто добавить,
self.view.layoutIfNeeded()
как показано ниже:источник