#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. Если это сработает, пожалуйста, проголосуйте и примите мой ответ. Спасибо.