Когда я нажимаю на 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
.
Я долго искал решение дляэта проблема, но все остальные, которые я видел, кажутся устаревшими или не выполняют то, что я пытаюсь достичь.