在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]中的数字值以使其成为景观的方法? 非常感谢你的进步!
答案 0 :(得分:0)
根据docs关于UIKeyboardFrameEndUserInfoKey
,
这些坐标不考虑任何旋转因子 作为界面方向的结果应用于窗口的内容 变化。因此,您可能需要将矩形转换为窗口 坐标(使用convertRect:fromWindow:方法)或查看 在使用之前坐标(使用convertRect:fromView:方法)。
因此,请先尝试将矩形转换为视图坐标,然后再将其存储为CGRect
或NSValue
,例如:
CGRect rect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGRect convertedRect = [self.view convertRect:rect fromView:nil];
NSValue *value = [NSValue valueWithCGRect:convertedRect];