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 76

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, который идентифицирует конечный кадр клавиатуры в экран координирует.

попробуйте это:

заменить UIKeyboardFrameBeginUserInfoKey с UIKeyboardFrameEndUserInfoKey

У меня была аналогичная проблема с использованием 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