iOS 11-высота клавиатуры возвращает 0 в уведомлении клавиатуры
Я использую уведомления клавиатуры без каких-либо проблем и получаю точную высоту клавиатуры.
- (void)keyboardDidShow:(NSNotification *) notification{
CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
NSLog(@"%f",keyboardSize.height);}
но с iOS 11 размер клавиатуры равен 0 при вызове уведомления.
в чем проблема, возникающая в этом сценарии? Я использую Xcode 9 Beta 5
5 ответов:
используйте этот:
CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
для Swift, вы можете использовать:
let keyboardSize = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.size
заменить
UIKeyboardFrameBeginUserInfoKey
С
UIKeyboardFrameEndUserInfoKey
ниже приведены документы Apple.
UIKeyboardFrameBeginUserInfoKey-ключ для объекта NSValue содержит CGRect, который идентифицирует начальный кадр клавиатуры в экранных координатах.
UIKeyboardFrameEndUserInfoKey-ключ для объекта NSValue содержит CGRect, который идентифицирует конечный кадр клавиатуры в экран координирует.
У меня была аналогичная проблема с использованием Xcode Версии 9.0 (9A235); хотя я использовал Swift. В моем методе keyboardWillShow я написал следующее:
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { let heightValue = keyboardSize.height ... }
Я заменил UIKeyboardFrameBeginUserInfoKey на UIKeyboardFrameEndUserInfoKey, и это исправило проблему для меня.
эта проблема происходит на iOS 11.
заменить
"UIKeyboardFrameBeginUserInfoKey" с "UIKeyboardFrameEndUserInfoKey"
как показано ниже, решить проблему
Цель-C Код :
CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
Swift 2.3:
let keyboardSize = (NfnPsgVar.userInfo![UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue().size
Swift 3:
let keyboardSize = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.size