iPhone - 当键盘已经显示时知道键盘尺寸

标签 iphone

好的,我知道我可以使用通知 UIKeyboardWillShowNotification 读取键盘大小

keybSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

但这只有在键盘显示时才可用。

但问题是这样的:当键盘可见且 iPhone 旋转时,我有一个窗口必须将自身调整到新位置。当我旋转 iPhone 时,两个委托(delegate)方法 willRotateToInterfaceOrientationdidRotateFromInterfaceOrientation 都会运行并处理旋转。在这些方法中,我需要知道当前的键盘高度,以便我可以正确定位 View 。问题是由 UIKeyboardWillShowNotification 通知触发的方法在委托(delegate)方法处理旋转之后运行。

方法运行的顺序是:

  1. willRotateToInterfaceOrientation
  2. didRotateFromInterfaceOrientation
  3. 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/

相关文章:

iphone - 在 iOS 中使用 AlertView

iphone - 使用 TPKeyboardAvoidingScrollView 移动键盘的文本字段不起作用

ios - iphone 5S 导出视频时慢动作没有了

iphone - iOS 具有相同应用程序的不同方向模式

iphone - 如何在iPhone中使用uislider设置音量控制?

iphone - 错误 : 'ZXingWidgetController.h' file not found

ios - 使用 avcapture session 拉伸(stretch)捕获图像

iphone - 如何弹出到不同的 View Controller

iphone - 设备中有错误,但模拟器中没有错误

iphone - 如何防止 subview 的剪辑部分仍然发生触摸事件?