好的,我知道我可以使用通知 UIKeyboardWillShowNotification 读取键盘大小
keybSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
但这只有在键盘显示时才可用。
但问题是这样的:当键盘可见且 iPhone 旋转时,我有一个窗口必须将自身调整到新位置。当我旋转 iPhone 时,两个委托(delegate)方法 willRotateToInterfaceOrientation 和 didRotateFromInterfaceOrientation 都会运行并处理旋转。在这些方法中,我需要知道当前的键盘高度,以便我可以正确定位 View 。问题是由 UIKeyboardWillShowNotification 通知触发的方法在委托(delegate)方法处理旋转之后运行。
方法运行的顺序是:
- willRotateToInterfaceOrientation
- didRotateFromInterfaceOrientation
- UIKeyboardWillShowNotification 方法
也就是说,键盘高度只是在最后读取,这意味着方法1和2都将使用旧的键盘高度。
我的问题是:有没有办法直接读取可见键盘的键盘高度,而不是依赖通知触发的方法?
谢谢
最佳答案
变体 1
您可以使用此代码片段来探索 View 层次结构:
- (void)printSubviews:(UIView *)aView {
NSLog(@"%@ - %@", [aView class], NSStringFromCGRect([aView frame]));
for (UIView *view in [aView subviews]) {
[self printSubviews:view];
}
}
- (void)printAllViews {
for (UIWindow *window in [[UIApplication sharedApplication] windows]) {
[self printSubviews:window];
}
}
您会发现,根据获得的值很容易算出键盘尺寸。
变体 2
或者,您可以导入UIKeyboard.h
(您可以在互联网上找到它)。它包括一种获取各种界面方向的默认键盘大小的方法。但是,这将使用私有(private) API,因此您可能需要小心。
关于iPhone - 当键盘已经显示时知道键盘尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5463485/