UIKeyboardWillShowNotification возвращает неверный кадр для быстрой клавиатуры
Я использую UIKeyboardWillShowNotification
и UIKeyboardWillHideNotification
для обработки клавиатуры.
Это функция, вызываемая при отображении клавиатуры:
-(void) keyboardWillShow:(NSNotification *)note
{
CGRect keyboardBounds;
//[[note.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue: &keyboardBounds];
NSValue* keyboardFrameBegin = [note.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey];
keyboardBounds = [keyboardFrameBegin CGRectValue];
}
Я получаю keyboardBounds= (0, 524, 320, 44), и я использую 5s. Не знаю, почему origin.y наступает 524 (должно быть где-то около 300) и высота 44!
Я также пробовал прокомментировать. В обоих направлениях ограничение клавиатуры составляет 44. Эта проблема приходит только для быстрой клавиатуры.
То же, что эта проблема
Ответы
Ответ 1
Хорошо, что проблема связана с быстрой клавиатурой, метод -(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 были выложены.), Здесь он получает точный фрейм, когда он просматривается, полностью выкладывается.
Ответ 2
Возможно, вы можете попробовать другие уведомления типа: UIKeyboardDidShowNotification
, UIKeyboardDidChangeFrameNotification
. UIKeyboardWillShowNotification
Просто скажите, что клавиатура покажет вам, не может сказать точно показанную рамку.