键盘大小返回错误的值?

时间:2012-07-15 19:27:18

标签: objective-c ios cocoa-touch

在订阅UIKeyboardDidShowNotification

后,在iPad上
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
NSLog(@"%@", NSStringFromCGSize(kbSize));

打印{352, 1024}

这不是错的吗?键盘的高度不仅如此之大,高度怎么能大于宽度? 或者我错过了什么?

1 个答案:

答案 0 :(得分:40)

我打赌尺寸是以静态方向报告的(“窗口”方向从未实际改变),因此我建议将其转换为您感兴趣的视图。我的常规技巧是将其转换为窗口的rootViewController视图的坐标空间:

CGRect rawKeyboardRect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
CGRect properlyRotatedCoords = [self.view.window convertRect:rawKeyboardRect toView:self.view.window.rootViewController.view];

如果您有一个可用的视图,或者更合适的视图。关键是窗口坐标空间中报告的任何坐标都不会旋转,即使窗口的rootVC视图是。