Мне нужно переместить UIView, как только клавиатура станет видимой. Но проблема, с которой я сейчас сталкиваюсь, заключается в том, что мой UIKeyboardWillShowNotification
называется три раза, когда я использую пользовательскую клавиатуру (например, SwiftKey), что приводит к плохой анимации.
Есть ли способ обработать только последнее уведомление? Я мог бы легко уклониться от первого, потому что высота равна 0, но вторая выглядит как допустимая высота, и я не нахожу ответа о том, как это решить.
Вот то, что я до сих пор:UIKeyboardWillShowNotification называется три раза
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillAppear:", name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillDisappear:", name: UIKeyboardWillHideNotification, object: nil)
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
NSNotificationCenter.defaultCenter().removeObserver(self)
}
func keyboardWillAppear(notification: NSNotification){
print("keyboard appear")
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue() {
print("with height: \(keyboardSize.height)")
if keyboardSize.height == 0.0 {
return
}
self.txtViewBottomSpace.constant = keyboardSize.height
UIView.animateWithDuration(0.4, animations: {() -> Void in
self.view.layoutIfNeeded()
})
}
}
func keyboardWillDisappear(notification: NSNotification){
print("Keyboard disappear")
self.txtViewBottomSpace.constant = 0.0
UIView.animateWithDuration(0.4, animations: {() -> Void in
self.view.layoutIfNeeded()
})
}
Мой выход Log является:
клавиатуры появляются
с высоты: 0,0
клавиатура появляется
с высоты: 216,0
клавиатуры
с высотой: 258.0
Клавиатура исчезает
Итак, есть ли способ обработать третье уведомление и «игнорировать» первые два?
Добавить команду if, чтобы проверить, не работает ли ваша высота клавиатуры = 258.0? –
Ну, не каждая клавиатура имеет такую же высоту, поэтому я не могу просто проверить 258.0 –