Я пытаюсь оживить (вверх и вниз) все виды в viewController, когда пользователь переместится с textField на textField, где каждый textField имеет клавиатуру с разной высотой, и я используя автозапуск для размещения всех видов.Ограничение просмотра анимации без анимации других видов
Что у меня есть четыре UITextFields
и три UIButtons
использования autolayout и которые двигаются вверх и вниз на основе различных клавиатур высоты, моя проблема в том, что по какой-то причине всех представлений анимации, как только нагрузки ViewController которая не является что я хочу, я хочу, чтобы они оживлялись, когда высота клавиатуры отличается. Анимация выглядит так, что она оживляет все размеры и позиции вида, как только загружается viewController.
Для управления анимацией у меня есть основное ограничение (constraintKeyboardHeight
), где все точки привязаны для определения их вертикального положения (см. Рисунок ниже).
FYI - Обратите внимание, что я автоматически фокусирую один из текстовых полей в методе viewDidLoad
. Я не уверен, что это связано с этим.
Любая идея? Это обычное поведение при анимации представлений с ограничениями?
override func viewDidLoad() {
super.viewDidLoad()
oneTextField.becomeFirstResponder()
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(UserInputViewController.keyboardWillShow(_:)), name: UIKeyboardWillShowNotification, object: nil)
}
func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
keyboardHeight = keyboardSize.height + 10
UIView.animateWithDuration(3.0, animations: {
self.constraintKeyboardHeight.constant = keyboardHeight
self.view.layoutIfNeeded()
})
}
}
@ Коннор Невилл. Проблема заключается в том, что анимации видны сразу, но, видимо, это ожидаемое поведение. Если я правильно понимаю это, 'self.view.layoutIfNeeded' обновляет все представления непосредственно в главном представлении от viewController, но почему анимация применяется ко всем представлениям, положению и размеру, если я только указываю на анимацию одно из ограничений? Я ожидал бы оживить все взгляды, но только вверх и вниз, чтобы приспособиться к значению этого ограничения. –
Анимация происходит сразу, потому что клавиатура появляется сразу, что кажется мне разумным, но если вы не хотите анимации при первом загрузке, вы можете установить какой-то булевский флаг для первой загрузки.И да, это ожидаемое поведение layoutIfNeeded, потому что одно изменение ограничения может и часто меняет макет всего представления. – Connor
@ Коннор Невилл - Теперь поймите. Еще один вопрос: как я могу отслеживать нагрузки? Это может решить мою проблему, поскольку анимационная работа, как я ожидаю, после первой загрузки. Если это слишком сложно, я поеду с добавлением представлений в один вид, как это было предложено в вашем ответе. Но мне любопытно посмотреть, как это делается. Благодарю. –