我在此页面上对几个答案投了否决票,因为它们具有危险的误导性。
当然,在 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 函数。
那个控件也需要屏幕键盘的高度,所以它的通知消息UIViews 会垂直居中显示。
这是一种享受...所以如果你确实需要一个快速的'n'dirty方法来获取键盘高度,获取此代码的副本,然后查看SVProgressHUD .m 文件。
Download SVProgressHUD from GitHub