В моем приложении у меня есть UIView, который содержит три текстовых поля:Предотвратить View From Раздвижная Когда Клавиатурные переключатели To Date Picker
Имя, Фамилия, Дата рождения.
Поля названия расположены рядом друг с другом на одной строке, а поле DOB находится под «линией» под ней.
Когда клавиатура открыта или закрыта, контроллер просмотра скользит вверх или вниз, чтобы убедиться, что поля не покрыты. Я могу переключаться с первого имени на фамилию без дополнительного скольжения, поскольку они остаются открытыми. Тем не менее, дата рождения установлена для отображения UIDatePicker вместо клавиатуры. Когда пользователь перемещается из любого поля имени в поле «Дата», клавиатура переключается на «Датчик даты», но не выполняет функцию «keyboardWillHide». Тем не менее, он будет выполнять функцию «keyboardWillShow» для нового устройства выбора даты, тем самым снова вернув контроллер просмотра.
Из-за этой проблемы любой контент в верхней части страницы будет прокручиваться вне поля зрения без какого-либо способа вернуть его, за исключением перезапуска приложения или сброса координат источника VC на viewWillAppear/Disappear.
Вот что мой код выглядит на данный момент для скольжения:
func keyboardWillShow(notification: NSNotification) {
if let userInfo = notification.userInfo {
if let keyboardSize = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
kbHeight = keyboardSize.height
self.animateTextField(true)
}
}
}
func keyboardWillHide(notification: NSNotification) {
self.animateTextField(false)
}
func animateTextField(up: Bool) {
var movementDistance = 80
var movementDuration = 0.3
var movement = CGFloat(up ? -movementDistance : movementDistance)
UIView.beginAnimations("anim", context: nil)
UIView.setAnimationBeginsFromCurrentState(true)
UIView.setAnimationDuration(movementDuration)
self.view.frame = CGRectOffset(self.view.frame, 0, movement)
UIView.commitAnimations()
}