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
Просто скажу вам, клавиатура покажет вам, не могу сказать, точно клавиатура, показанная кадр.