iPad屏幕键盘的高度是多少?
Posted
技术标签:
【中文标题】iPad屏幕键盘的高度是多少?【英文标题】:What is the height of iPad's onscreen keyboard? 【发布时间】:2011-05-11 23:06:26 【问题描述】:我在这里寻找两个数字:纵向高度和横向高度。不要以厘米或英寸为单位回答,而是以像素为单位。
【问题讨论】:
您可以轻松制作两张截图并进行测量。 OP 请将正确答案更改为以编程方式确定框架的答案之一。此外,您不能指定像素,而是在 ios 上指定点。 如果您正在寻找高度,而不是通过编程找到的高度,那么这是一个措辞不当的问题。你想要英文键盘吗?溢出的键盘?启用自动填充的高度?甚至是新的 iOS 8 键盘?另外,如果您不想要程序化答案,请不要在 *** 上提问。大多数遇到这个问题和公认答案的开发人员都会被误导。从开发的角度来看,您应该始终以编程方式找到高度。从设计的角度来看,找一个像素尺并测量它。 iPad keyboard dimensions 的可能重复项 【参考方案1】:我不知道它是什么,但你可以很容易地弄清楚。
在您的 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>
单击按钮(在您调出屏幕键盘之后),它应该会告诉您高度。重复另一个方向。
【讨论】:
我没有 iPad,也没有网络服务器,所以这对我来说并不容易。我希望有人可以提供这些数字。 这在 ipad 上很棒,但在 iphone 上似乎不起作用,因为它居中。 这个解决方案在 ios/safari 中是不可能的。因为键盘没有调整主网页视图的大小。【参考方案2】:您可以通过编程方式找到这一点(如果您没有设备,则通过模拟器)。
http://developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html#//apple_ref/doc/uid/TP40009542-CH5-SW1
【讨论】:
【参考方案3】:高度是: 肖像 = 264 景观 = 352
【讨论】:
这就是我正在寻找的答案。如果您可以提供横向高度,我会接受它作为我的答案。 :) 英文键盘的纵向高度是264,所以你的回答不正确,但还是谢谢。 你是对的。对不起。我测量它们的方式没有考虑到状态栏的 20 像素。我现在已经更新了我的答案。【参考方案4】:纵向高度为264,横向高度为352。
我知道这是一个迟到的答案,但我自己只是遇到了这个问题。
【讨论】:
不用担心答案会迟到。一旦我验证了高度,我就会接受这个答案。 :) 这是一个糟糕的答案。您永远不想对这些像素值进行硬编码,因为它们可能会在未来的版本中更改。例如,Apple 可以将键盘的尺寸调整几个像素,他们可以引入新的键盘形式(例如拆分键盘)或针对不同语言的不同尺寸。他们还可以发布不同分辨率的屏幕(例如视网膜显示器)。所有这些情况都可能导致代码的预期效果中断。使用其他答案提供的动态解决方案之一会更好。 @JamesBedford 这不是一个糟糕的答案,而是正确的答案。你甚至不知道我需要这些测量值是为了什么。也许我是一名图形设计师,需要键盘的高度来绘制合适的模型。在应用程序中硬编码这些值可能是不好的做法,但这与答案的质量无关。 @LeonS,这个答案不正确。您的答案适用于 iPhone。这个问题是关于 iPad 的。 @foob.ar 当被问到这个问题时,只有一个可用的 iPad,并且键盘高度在可用的 iOS 版本之间没有差异。不同的语言有不同高度的键盘,但大多数键盘的高度与英文键盘相同。今天情况大不相同,这个答案的用处要低得多,但从历史上看,它具有相关性,您可以从支持的数量看出。【参考方案5】:在 iPad 上,键盘大小也可能取决于语言(例如,日文键盘更高)。以编程方式查询它的另一个原因。
【讨论】:
中文键盘也更高,因为它们是可以根据输入选择的单词。【参考方案6】:- (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
【讨论】:
+1 for this answer-显示了在横向中如何将高度返回为应该是宽度。我注意到我在横向中的高度为 1024,宽度为 352,这对我来说似乎很奇怪,直到我看到这个答案。谢谢 答案不完整。 这怎么不完整/不明显? 这就是为什么,因为你需要这个:[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
但是我的问题是,这个应用程序是横向的,这段代码似乎没有让它生效。它说我的高度是 1024,宽度是 396。
@thefoyer - 你有没有弄清楚横向应用程序发生了什么?似乎在 iOS 8 上已修复,但在 iOS 7 上我遇到了同样的问题,只是假设最小尺寸是高度......有点 hacky 但它似乎工作。【参考方案7】:
您可以从 UIWindow 类 (reference guide link) 提供的 will/did 显示/隐藏键盘通知返回的 userInfo 字典中获取键盘高度。这是一种比硬编码更好的获取高度的方法,因为您可以获得以下好处:
设备独立性(iPhone/iPod 或 iPad) 分辨率独立性(iPhone 3G 屏幕/视网膜显示器/iPad 显示器/未来显示器)。 键盘类型/样式独立(不同的屏幕键盘可能有不同的大小)。事实上,通过查看此字典中返回的结果,给出确切数字的这个问题的答案最有可能得到这个数字!
【讨论】:
可以,但是sn-ps已经被别人提供了,没关系! :)【参考方案8】:答案是:视情况而定。
我知道键盘可以有 16 种不同的高度,并且可以在任何位置。
不同的是:
-
风景/肖像,
webview/非webview,
亚洲字符选择样式,常规语言
分体键盘/非分体
我附上了一张图片,展示了一些不同的可能配置。
与其列举所有 16 种可能性,我认为您希望观察 UIKeyboardWillShowNotification
/UIKeyboardWillHideNotification
和 UIKeyboardDidChangeFrameNotification
(iOS 5.0+),然后从这些事件中获取键盘的框架。
【讨论】:
【参考方案9】:在 iOS 7 中,对于 iPad,横向为 402,纵向为 314
【讨论】:
它可能在您的应用程序和上下文中,但这不是一个普遍的事实。请参阅@jcampbell1 和其他人的答案。这取决于很多东西,包括语言、辅助工具栏、第 3 方键盘等。【参考方案10】:我在此页面上对几个答案投了否决票,因为它们具有危险的误导性。
当然,在 iOS 8 中,您不能使用硬编码的键盘高度。
这是我在 iPhone 上运行的应用程序,说明原因。
拿起你的尺子,告诉我,屏幕键盘的高度是多少..?
啊……你做不到,是吗?
如果用户打开屏幕键盘顶部的自动输入栏(顺便说一下,这会触发第二个“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 通知,因为这个小控件是通用的,可以从我的任何屏幕调用。
如果屏幕键盘当前可见,我的解决方案是使用免费 SVProgressHUD
控件中出色的 visibleKeyboardHeight 函数。
那个控件也需要屏幕键盘的高度,所以它的通知消息UIView
s 会垂直居中显示。
这是一种享受...所以如果你确实需要一个快速的'n'dirty方法来获取键盘高度,获取此代码的副本,然后查看SVProgressHUD .m 文件。
Download SVProgressHUD from GitHub
【讨论】:
【参考方案11】: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;
【讨论】:
【参考方案12】:我认为比其他答案解决的麻烦更多。例如,您最终可以使用这个键盘:
当您在 iOS 9 上单击 iPad 键盘上的“隐藏”按钮时会发生这种情况。此键盘在来自 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 在两个方向上都适用。
【讨论】:
【参考方案13】:我创建了这张表,其中包含 iPhone 和 iPad 键盘的高度,适用于横向和纵向模式,工具栏打开和关闭。
我什至解释了如何在代码 here 中使用这些维度。
请注意,如果您需要在布局视图之前知道键盘的尺寸,则应仅使用这些尺寸。否则,其他答案的解决方案效果更好。
【讨论】:
以上是关于iPad屏幕键盘的高度是多少?的主要内容,如果未能解决你的问题,请参考以下文章