Подтвердить что ты не робот

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. Эта проблема приходит только для быстрой клавиатуры.
То же, что эта проблема

4b9b3361

Ответ 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

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