Я пытаюсь анимировать представление во время отображения/скрытия клавиатуры, но оно не работает, анимация использует время продолжительности анимации клавиатуры вместо моего.
Я обнаружил здесь, что это нормально, поскольку на клавиатуре есть блок анимации, предоставляемый средой выполнения. Однако это может быть переопределено в качестве параметров: https://developer.apple.com/documentation/uikit/uiview/animationoptions/1622434-overrideinheritedduration
Однако он не работает, он игнорирует мою конфигурацию и вместо этого использует клавиатуру. Я пытался обернуть код с помощью Dispatch.main.async, и иногда это работает, а иногда нет.
Кто-нибудь знает, как это исправить?
Я подумал, что это может быть связано с тем, что мое ограничение обновляется внутри блока клавиатуры, и, поскольку у него есть собственный блок анимации, он может быть уже обновлен при запуске моей пользовательской анимации, не уверен, что это имеет смысл.
@objc func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
constraint.constant = -300
DispatchQueue.main.sync {
UIView.animate(withDuration: 15, delay: 0, options: [.overrideInheritedDuration], animations: {
self.view.layoutIfNeeded()
}, completion: nil)
}
}
}