87

纵向高度和横向高度以磅为单位。

4

8 回答 8

215

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

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

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

然后,我使用下面的代码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 的等效实现:

NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: UIResponder.keyboardDidShowNotification, object: nil)


@objc
func keyboardDidShow(notification: Notification) {
    guard let info = notification.userInfo else { return }
    guard let frameInfo = info[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }
    let keyboardFrame = frameInfo.cgRectValue
    print("keyboardFrame: \(keyboardFrame)")
}
于 2014-03-28T17:14:18.360 回答
46

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

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

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

在此处输入图像描述

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

在上面的示例中,我使用了来自以下站点的示例代码,它为垂直约束constant值设置了动画。

练习自动布局

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

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

在此处输入图像描述

是的。它很丑。

我有点恼火/惊讶的是,Xcode 6 可怕的 AutoLayout 不仅允许我们将控件的底部附加到屏幕底部或屏幕键盘的顶部。

也许我错过了一些东西。

除了我的理智。

于 2015-01-06T12:28:58.557 回答
30

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

来源

于 2012-07-01T17:49:23.597 回答
17

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

这取决于型号和 QuickType 栏:

在此处输入图像描述

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

于 2015-03-23T15:01:04.670 回答
11

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

斯威夫特 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
   }
}
于 2016-10-12T12:01:48.837 回答
10

我找不到最新的答案,所以我用所有 iOS 11.0 模拟器检查了它:

iOS 11 设备 屏幕高度 肖像 景观
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 加、iPhone 7 加、iPhone 8 加 736.0 226.0 162.0
第 5 代 iPad、iPad Air、iPad Air 2、iPad Pro 9.7、iPad Pro 10.5、iPad Pro 12.9 1024.0 265.0 353.0
于 2017-10-11T05:37:15.830 回答
1

我创建了这张表,其中包含 iPhone 和 iPad 键盘的高度,包括横向和纵向模式,工具栏都打开和关闭。

我什至在这里解释了如何在代码中使用这些维度。

请注意,如果您需要在布局视图之前知道键盘的尺寸,则应该只使用这些尺寸。否则,其他答案的解决方案效果更好。

在此处输入图像描述

于 2020-12-26T16:57:45.043 回答
0

苹果手机

键盘尺寸:

  1. 5S、SE、5、5C (320 × 568) 键盘尺寸 = (0.0, 352.0, 320.0, 216.0) 键盘尺寸 = (0.0, 315.0, 320.0, 253.0)

2.6S,6,7,8:(375 × 667) : 键盘大小 = (0.0, 407.0, 375.0, 260。

3.6+,6S+, 7+ , 8+ : (414 × 736) 键盘尺寸 = (0.0, 465.0, 414.0, 271.0)

4.XS, X :(375 X 812) 键盘尺寸 = (0.0, 477.0, 375.0, 335.0)

5.XR,XSMAX((414 x 896) 键盘尺寸 = (0.0, 550.0, 414.0, 346.0)

于 2019-05-27T13:10:25.760 回答