Весь ответ в коде выглядит следующим образом. Для начала вам необходимо зарегистрироваться для получения уведомлений:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
и больше здесь . Обратите внимание, что вам тоже нужно от них избавиться (используйте removeObserver
).
Тогда вам нужен метод, который получает уведомление, чтобы получить размер. Обратите внимание, что размер сначала не поворачивается (так как UIWindow
не вращается. Его содержимое делает).
- (void) keyboardDidShow:(NSNotification*)notification {
CGRect keyboardFrame = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
NSLog(@"keyboard frame raw %@", NSStringFromCGRect(keyboardFrame));
UIWindow *window = [[[UIApplication sharedApplication] windows]objectAtIndex:0];
UIView *mainSubviewOfWindow = window.rootViewController.view;
CGRect keyboardFrameConverted = [mainSubviewOfWindow convertRect:keyboardFrame fromView:window];
NSLog(@"keyboard frame converted %@", NSStringFromCGRect(keyboardFrameConverted));
}
Очевидно, что если у вас есть ссылка на ваш mainSubviewOfWindow
каким-либо другим способом, используйте его.