#ios #swift #keyboard #constraints #swift3
#iOS #swift #клавиатура #ограничения #swift3
Вопрос:
Итак, у меня есть a UIButton
, который находится внизу UIView
, пока не появится клавиатура, после чего нижнее ограничение обновляется до высоты клавиатуры.
Это отлично работает с клавиатурой iOS по умолчанию, но при использовании пользовательской клавиатуры, такой как SwiftKey, нижнее ограничение по-прежнему соответствует высоте клавиатуры iOS.
Я заметил, что пользовательская клавиатура выдает три уведомления вместо одного. Так что это может быть проблемой, но как я могу использовать правильное значение?
@IBOutlet weak var fieldBottomConstant: NSLayoutConstraint!
var keyboardShowing = false
var keyboardHeight: CGFloat = 0.0
func keyboardWillShow(_ n:Notification) {
self.keyboardShowing = true
if let keyboardSize = (n.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
// fieldBottomConstant.constant = keyboardSize.height
keyboardHeight = keyboardSize.height
}
fieldBottomConstant.constant = keyboardHeight
}
func keyboardWillHide(_ n:Notification) {
self.keyboardShowing = false
fieldBottomConstant.constant = 0
}
override func viewWillAppear(_ animated: Bool) {
NotificationCenter.default.addObserver(self, selector: #selector(AddViewController.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(AddViewController.keyboardWillHide(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(AddViewController.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(AddViewController.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(AddViewController.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardDidChangeFrame, object: nil)
}
Обновить
Я добавил еще несколько уведомлений, чтобы следить за любыми изменениями, и ограничения меняются на пользовательскую высоту клавиатуры после поворота устройств, однако по-прежнему не используют пользовательскую высоту клавиатуры при первой загрузке клавиатуры.
Ответ №1:
Ответ заключался в использовании
UIKeyboardFrameEndUserInfoKey
Ответ №2:
Вы должны слушать NSNotification.Name.UIKeyboardWillChangeFrame