Есть ли обработчик уведомлений для изменения размера клавиатуры во время ввода текста пароля?

#ios #swift

#iOS #swift

Вопрос:

Я настроил клавиатуру для переключения экрана при появлении клавиатуры. Но когда человек пытается ввести поле пароля, клавиатура меняет размер (рекомендации отключаются). Из-за этого изменения я сталкиваюсь с черной полосой внизу, когда поле пароля активно. Поэтому мне нужен обходной путь для изменения высоты экрана в зависимости от высоты клавиатуры.

Ссылки на скриншоты: https://drive.google.com/file/d/1rPqIdHwtilGPdwrVxTQlDagLwogq3GzT/view?usp=sharing
https://drive.google.com/file/d/1Kd7Ppi6ijr1xC15n3hKxdXBblUD0zWMI/view?usp=sharing

 func hideKeyboardWhenTappedAround() {
    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
    tap.cancelsTouchesInView = false
    view.addGestureRecognizer(tap)
}
@objc func dismissKeyboard() {
    view.endEditing(true)
}
func keyboardToggle() {
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)

    self.hideKeyboardWhenTappedAround()
}
@objc func keyboardWillShow(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        if self.view.frame.origin.y == 0 {
            self.view.frame.origin.y -= (keyboardSize.height)
        }
    }

}

@objc func keyboardWillHide(notification: NSNotification) {
    if self.view.frame.origin.y != 0 {
        self.view.frame.origin.y = 0
    }
}
 

Ответ №1:

Я не думаю, что существует специальный метод переопределения для поля пароля, но вы можете исправить проблему с черным цветом, установив цвет окна

 UIApplication.shared.keyWindow?.backgroundColor = UIColor.white
 

Комментарии:

1. Это простое изменение, которое может решить проблему. Спасибо!

Ответ №2:

Вам не нужно обрабатывать какие-либо другие уведомления, это должно сработать. Пожалуйста, внесите небольшое изменение в свой метод keyboardWillShow. Вот так

   @objc func keyboardWillShow(notification: NSNotification) {

   let info : NSDictionary = notification.userInfo! as NSDictionary

   if let keyboardSize = (info[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue.size {. // I've changed 'keyboardFrameBeginUserInfoKey' to UIKeyboardFrameEndUserInfoKey
    // if self.view.frame.origin.y == 0 { I think its not required
        self.view.frame.origin.y -= (keyboardSize.height)
       //}
}

}
 

Комментарии:

1. Пожалуйста, также измените view.frame.origin.y = высота экрана — высота клавиатуры, что-то в этом роде, вместо того, чтобы просто уменьшаться каждый раз.

2. ДА. Понял. Спасибо!

3. Если это сработает, пожалуйста, проголосуйте и примите мой ответ. Спасибо.