UIKeyboardWillShowNotification возвращает неправильный кадр для быстрой клавиатуры

Я использую UIKeyboardWillShowNotification а также UIKeyboardWillHideNotification обрабатывать клавиатуру.
Эта функция вызывается, когда отображается клавиатура:

-(void) keyboardWillShow:(NSNotification *)note
{
    CGRect keyboardBounds;
    //[[note.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue: &keyboardBounds];
    NSValue* keyboardFrameBegin = [note.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey];
    keyboardBounds = [keyboardFrameBegin CGRectValue];  
}  

Я получаю клавиатурные ограничения = (0, 524, 320, 44), и я использую 5 с. Не знаю, почему origin.y идет 524 (должно быть где-то около 300) и высота 44! Я также попробовал прокомментированную строку. В обоих случаях клавиатура связана с 44. Эта проблема возникает только для быстрой клавиатуры.
То же, что и этот вопрос

2 ответа

Решение

Ну проблема с быстрой клавиатурой, метод -(void) keyboardWillShow:(NSNotification *)note вызывается три раза, и каждый раз возвращает три разных значения origin.y и высоту, когда в первый раз выдает keyboardBounds = (0, 524, 320, 44), во второй раз он выдает keyboardBounds = (0, 308, 320, 260) и, наконец, в третий раз, когда он вызывается, он возвращает keyboardBounds = (0, 271, 320, 297).

Поскольку сторонние размеры клавиатуры не являются фиксированными... их размеры устанавливаются в соответствии с тем, как это выглядит в представлении, аналогично случаю авторазметки (viewDidLoad,viewWillAppear viewWillLayout,viewDidLayout и затем viewDidAppear, поэтому точный кадр вы узнаете в viewDidAppear или viewDidLayout, где View был размечен.), Здесь он получает точный кадр, когда вид полностью выложен.

Может быть, вы можете попробовать другие уведомления, такие как:UIKeyboardDidShowNotification,UIKeyboardDidChangeFrameNotification, UIKeyboardWillShowNotification

Просто скажу вам, клавиатура покажет вам, не могу сказать, точно клавиатура, показанная кадр.

Другие вопросы по тегам