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

我在这里寻找两个数字:纵向的高度和横向的高度。 不要以厘米或英寸来回答,而应以像素为单位。

纵向高度是264,而横向高度是352。

我知道这是一个迟到的答案,但我自己只是碰到了这个问题。

- (void) keyboardWasShown:(NSNotification *)nsNotification { NSDictionary *userInfo = [nsNotification userInfo]; CGSize kbSize = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; NSLog(@"Height: %f Width: %f", kbSize.height, kbSize.width); // Portrait: Height: 264.000000 Width: 768.000000 // Landscape: Height: 352.000000 Width: 1024.000000 } 

答案是: 这取决于

我知道键盘可以有16种不同的高度,它可以在任何位置。

这是不同的:

  1. 横向纵向,
  2. 网页视图/非web视图,
  3. 亚洲人物select风格,常规语言
  4. 拆分键盘/不拆分

我附上了一个显示一些不同的可能configuration的图像。

样品iPad的键盘配置

而不是枚举所有16种可能性,我想你要观察UIKeyboardWillShowNotification / UIKeyboardWillHideNotificationUIKeyboardDidChangeFrameNotification (iOS 5.0+),然后从这些事件中获取键盘的框架。

在iPad上,键盘大小也可以取决于语言(例如日本键盘较高)。 另一个以编程方式查询的原因。

您可以从UIWindow类( 参考指南链接 )提供的will / did显示/隐藏键盘通知返回的userInfo字典中获取键盘高度。 这是获得高度比硬编码更好的方法,因为你有以下好处:

  • 设备独立性(iPhone / iPod或iPad)
  • 分辨率独立性(iPhone 3G屏幕/视网膜显示屏/ iPad显示屏/未来显示屏)。
  • 键盘types/风格独立性(不同的屏幕键盘可能有不同的尺寸)。

实际上,给出确切数字的这个问题的答案很可能通过查看在这个词典中返回的结果得到了这个数字!

我已经在这个页面上投了几个答案,因为它们是危险的误导。

当然,在iOS 8中,您不能使用硬编码的键盘高度。

这是我的应用程序,运行在iPhone上,给我的理由为什么。

抓住你的尺子,告诉我,屏幕键盘的高度是多less?

在这里输入图像说明

啊…你不能这样做,可以吗?

如果用户打开屏幕键盘顶部的自动types栏(顺便说一下,触发第二个“ keyboardWillShow ”事件),高度可以变化。

iPad上的屏幕键盘也是如此。

底线:抱歉的人,你必须keyboardWillShow事件中测量键盘高度。

否则你会遇到问题。

 - (void)keyboardWillShow:(NSNotification *)notification { NSDictionary *info = [notification userInfo]; NSValue *kbFrame = [info objectForKey:UIKeyboardFrameEndUserInfoKey]; CGRect keyboardFrame = [kbFrame CGRectValue]; keyboardFrame = [self.view convertRect:keyboardFrame fromView:nil]; CGFloat heightOfKeyboard = keyboardFrame.size.height; NSLog(@"The keyboard is now %d pixels high.", (int)heightOfKeyboard); } 

顺便说一句,不要忘记在上面的代码中调用convertRect

没有它,我发现,在iOS 8环境下运行的iPad上,有时键盘会被报告为具有1024像素的高度。

还有一件事…

今天,我正在研究一个我写的自定义控件,它出现在iPhone / iPad屏幕的底部,并意识到我没有考虑到屏幕键盘的高度。

我不想添加keyboardWillShow / Hide通知,因为这个小控件是通用的,可以从我的任何屏幕调用。

我find屏幕键盘高度的解决方法是使用免费SVProgressHUD控件的优秀visibleKeyboardHeight函数。

该控件需要屏幕键盘的高度,所以它的通知消息UIView将会出现在垂直居中。

它工作的一种享受…所以如果你确实需要一个快速的抓取键盘高度的方法,那么抓住这个代码的副本,然后看看SVProgressHUD.m文件。

从GitHub下载SVProgressHUD

我不知道这是什么,但你可以很容易地弄清楚。

在iPad上浏览到这个页面

JavaScript的

 var totalHeight = window.innerHeight; document.getElementById('what-is-my-height').onclick = function() { alert(totalHeight - window.innerHeight); }; 

HTML

 <button id="what-is-my-height">Bring up keyboard, then push me</button> 

点击button(在你popup屏幕键盘之后),它会告诉你高度。 重复其他的方向。

在iOS 7中,对于iPad,横向为402,纵向为314

高度是:肖像= 264风景= 352

在iOS 7中,高度和宽度在横向模式下没有交换,但问题在iOS 8中得到了修复。

所以,下面是一段总是会返回iOS7或iOS8高度的代码,从而消除了代码中特定于版本的检查。

 - (void)keyboardWasShown:(NSNotification*)aNotification { NSDictionary* info = [aNotification userInfo]; CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; //Always gives the height as the height is of smaller dimension CGFloat height = (kbSize.height>kbSize.width)?kbSize.width:kbSize.height; } 

我认为还有更多的麻烦,而不是解决别人的答案。 例如,你可以结束这个键盘:

在这里输入图像说明

当你点击iOS 9上的iPad键盘上的“隐藏”button时,会发生这种情况。这个键盘在Mike Gledhill回答信息中仍然是full尺寸的。 (在UIKeyboardFrameEndUserInfoKey键盘高度高于300)。

我不得不从设备高度减去键盘的y轴原点,以达到正确的值。

 - (void)keyboardWillShow:(NSNotification *)notification NSDictionary *info = [aNotification userInfo]; CGRect keyboardFrame = [info[UIKeyboardFrameBeginUserInfoKey] CGRectValue]; keyboardFrame = [info[UIKeyboardFrameEndUserInfoKey] CGRectValue]; keyboardFrame = [self.view convertRect:keyboardFrame fromView:nil]; CGFloat yPosition = keyboardFrame.origin.y; NSInteger height = [UIScreen mainScreen].bounds.size.height - yPosition; } 

适用于iOS9的iPhone和iPad。