iPhone屏幕键盘的高度是多less?

肖像的高度和景观的高度以点为单位。

我用下面的方法来确定iOS 7.1中的键盘的框架。

在我的视图控制器的init方法中,我注册了UIKeyboardDidShowNotification

 NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; [center addObserver:self selector:@selector(keyboardOnScreen:) name:UIKeyboardDidShowNotification object:nil]; 

然后,我在keyboardOnScreen:使用了以下代码keyboardOnScreen:访问键盘的框架。 此代码从通知中获取userInfo字典,然后访问与NSValue关联的UIKeyboardFrameEndUserInfoKey 。 然后可以访问CGRect并将其转换为视图控制器视图的坐标。 从那里,你可以根据该框架执行任何你需要的计算。

 -(void)keyboardOnScreen:(NSNotification *)notification { NSDictionary *info = notification.userInfo; NSValue *value = info[UIKeyboardFrameEndUserInfoKey]; CGRect rawFrame = [value CGRectValue]; CGRect keyboardFrame = [self.view convertRect:rawFrame fromView:nil]; NSLog(@"keyboardFrame: %@", NSStringFromCGRect(keyboardFrame)); } 

迅速

和Swift等价的实现…订阅通知:

 NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardShown:", name: UIKeyboardDidShowNotification, object: nil) 

以及计算键盘大小的方法:

 func keyboardShown(notification: NSNotification) { let info = notification.userInfo! let value: AnyObject = info[UIKeyboardFrameEndUserInfoKey]! let rawFrame = value.CGRectValue() let keyboardFrame = view.convertRect(rawFrame, fromView: nil) println("keyboardFrame: \(keyboardFrame)") } 

Swift 2.0

 NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardShown:", name: UIKeyboardDidShowNotification, object: nil) 

以及计算键盘大小的方法:

 func keyboardShown(notification: NSNotification) { let info = notification.userInfo! let value: AnyObject = info[UIKeyboardFrameEndUserInfoKey]! let rawFrame = value.CGRectValue let keyboardFrame = view.convertRect(rawFrame, fromView: nil) print("keyboardFrame: \(keyboardFrame)") } 

SWIFT 3.0

观察

 NotificationCenter.default.addObserver(self, selector: #selector(keyboardShown), name:NSNotification.Name.UIKeyboardWillShow, object: nil); 

方法

 func keyboardShown(notification: NSNotification) { let info = notification.userInfo! let keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue print("keyboardFrame: \(keyboardFrame)") } 

纵向模式的键盘高度为216pts,横向模式的键盘高度为162pts。

资源

请记住,在iOS 8中,屏幕键盘的大小可能会有所不同。 不要认为屏幕上的键盘总是可见的(具有特定的高度)或不可见的。

现在,在iOS 8中,用户也可以打开和closures文本预测区域,当他们这样做时,会再次启动应用程序的keyboardWillShow事件。

破坏大量的遗留代码示例,这些示例build议您编写一个keyboardWillShow事件,该事件仅测量屏幕键盘的当前高度,并将该控件在页面上向上或向下移动此(绝对)量。

在这里输入图像描述

换句话说,如果你看到任何示例代码,它只是告诉你添加一个keyboardWillShow事件,测量键盘高度,然后调整你的控件的高度这个数量,这将不再总是工作。

在我上面的例子中,我使用了来自以下站点的示例代码,它激活了垂直约束constant量值。

练习AutoLayout

在我的应用程序中,我添加了一个约束到我的UITextView ,设置在屏幕的底部。 当屏幕第一次出现时,我保存了这个初始的垂直距离。

然后,每当我的keyboardWillShow事件开始时,我 (新)键盘高度添加到这个原始约束值(所以约束调整控件的高度)。

在这里输入图像描述

是啊。 它很丑。

XCode 6令人痛苦的AutoLayout让我们不仅能够将控件的底部连接到屏幕底部或屏幕键盘的顶部,而且我对此感到有点恼火/惊讶。

也许我错过了一些东西。

除了我的理智。

版本说明:这在iOS 9和10中不再有用,因为它们支持自定义键盘大小。

这取决于模型和QuickType栏:

在这里输入图像描述

http://www.idev101.com/code/User_Interface/sizes.html

键盘高度取决于型号,QuickType栏,用户设置…最好的方法是计算dinamically:

Swift 3.0

  var heightKeyboard : CGFloat? override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardShown(notification:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil) } func keyboardShown(notification: NSNotification) { if let infoKey = notification.userInfo?[UIKeyboardFrameEndUserInfoKey], let rawFrame = (infoKey as AnyObject).cgRectValue { let keyboardFrame = view.convert(rawFrame, from: nil) self.heightKeyboard = keyboardFrame.size.height // Now is stored in your heightKeyboard variable } } 

我找不到最新的答案,所以我使用模拟器进行检查(iOS 11.0)


设备| 屏幕高度| 肖像| 景观

iPhone 4s | 480.0 | 216.0 | 162.0

iPhone 5,iPhone 5s,iPhone SE | 568.0 | 216.0 | 162.0

iPhone 6,iPhone 6s,iPhone 7,iPhone 8,iPhone X | 667.0 | 216.0 | 162.0

iPhone 6 plus,iPhone 7 plus,iPhone 8 plus | 736.0 | 226.0 | 162.0

iPad第五代,iPad Air,iPad Air 2,iPad Pro 9.7,iPad Pro 10.5,iPad Pro 12.9 | 1024.0 | 265.0 | 353.0


谢谢!