无法获得UIKeyboardFrameEndUserInfoKey的格局值

时间:2015-01-10 14:24:01

标签: ios objective-c

在iOS 8之前,我可以使用UIKeyboardBoundsUserInfoKey来获取键盘信息。

NSValue *value = [info objectForKey:UIKeyboardBoundsUserInfoKey];

我意识到这是折旧的,从iOS 8开始它就不再适用了。我尝试使用UIKeyboardFrameEndUserInfoKey,但它似乎甚至在横向上返回纵向值。当我在iOS 7上NSLog(@"%@", [info objectForKey:UIKeyboardBoundsUserInfoKey]);时,它会记录NSRect: {{0, 0}, {162, 568}},但当我NSLog(@"%@", [info objectForKey:UIKeyboardFrameEndUserInfoKey]);时,它会记录NSRect: {{0, 0}, {568, 162}}

任何人都知道在iOS 8上工作的valueForKey会以横向模式返回信息吗?或者一种“交换”[info objectForKey:UIKeyboardFrameEndUserInfoKey]中的数字值以使其成为景观的方法? 非常感谢你的进步!

1 个答案:

答案 0 :(得分:0)

根据docs关于UIKeyboardFrameEndUserInfoKey

  

这些坐标不考虑任何旋转因子   作为界面方向的结果应用于窗口的内容   变化。因此,您可能需要将矩形转换为窗口   坐标(使用convertRect:fromWindow:方法)或查看   在使用之前坐标(使用convertRect:fromView:方法)。

因此,请先尝试将矩形转换为视图坐标,然后再将其存储为CGRectNSValue,例如:

CGRect rect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGRect convertedRect = [self.view convertRect:rect fromView:nil];
NSValue *value = [NSValue valueWithCGRect:convertedRect];