Когда я нажимаю на UITextField
в нижней части экрана, он скрывается клавиатурой. Что я хотел сделать, так это переместиться вверх со стандартной анимацией iOS, достигнув UITextField
того, в который я вставляю текст. Я разрабатываю приложение в Swift 5 (Xcode 10.2)
Результат, которого я достиг, заключается в том, что теперь я могу перемещать вид (чуть раньше, чем хотелось бы), но вид перемещается каждый раз, когда я нажимаю на UITextField
, а не только тот, который будет скрыт клавиатурой.
class ViewController: UIViewController {
deinit {
NotificationCenter.default.removeObserver(self)
}
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
}
@objc func keyboardWillShow(notification: NSNotification) {
guard let userInfo = notification.userInfo else {
return
}
guard let keyboardSize = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else {
return
}
let keyboardFrame = keyboardSize.cgRectValue
if self.view.frame.origin.y == 0 {
self.view.frame.origin.y -= keyboardFrame.height
}
}
@objc func keyboardWillHide(notification: NSNotification) {
guard let userInfo = notification.userInfo else {
return
}
guard let keyboardSize = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else {
return
}
let keyboardFrame = keyboardSize.cgRectValue
if self.view.frame.origin.y != 0 {
self.view.frame.origin.y += keyboardFrame.height
}
}
}
Результат, который я хочу получить, заключается в том, что если пользователь нажимает на UITextField
, который будет скрыт клавиатурой, то через некоторое время после появления клавиатуры вид перемещается вверх до тех пор, пока пользователь не увидит нажатый UITextField
.
Я долго искал решение этой проблемы, но все остальные, которые я видел, кажутся устаревшими или не делают того, чего я пытаюсь достичь.