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


84

纵向的高度和横向的高度以点为单位。


2
在这里您可以找到iPhone的所有尺寸:iPhone尺寸
Pfitz

3
不要使用最后一个“ iPhone尺寸”链接!这是从2011年开始的,在iOS 8出现之前,它允许屏幕键盘高度发生变化。
Mike Gledhill,2015年

@MikeGledhill屏幕键盘高度甚至在iOS 8之前也有所不同
。– ReDetection

相关:如果您正在寻找键盘高度的实际值(例如出于调试目的),请参阅iOS外语键盘高度?
有意义

Answers:


211

我使用以下方法确定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)")
}

4
尽管似乎有点涉及,但这肯定比硬编码键盘大小更好。正确答案。
n13

2
投票了这个答案,然后投票否决了这个问题。OP绝对不知道他在说什么。小心点!这个答案是正确的!
superarts.org 2014年

2
横向的一种补充:if(SYSTEM_VERSION_LESS_THAN(@“ 8.0”)){_keyboardHeight = keyboardFrame.size.width; } else {_keyboardHeight = keyboardFrame.size.height; }
LiangWang 2014年

3
有没有一种方法可以使键盘不出现?以我为例,我想在键盘后方留出一些高度相同的东西(类似于Messenger的东西)
John

@ superarts.org无需投票否决该问题;人们将最有可能寻找这一点,他们现在看到这个答案..所以一切都很好:)
杰克

46

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

现在,与iOS 8,用户还可以刷卡上下车文本的预测区域...并做到这一点时,他们,这将揭开序幕的应用程序的keyboardWillShow事件再次

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

在此处输入图片说明

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

在上面的示例中,我使用了来自以下站点的示例代码,该示例对垂直约束constant值进行了动画处理。

练习自动版式

在我的应用中,我向UITextView屏幕底部添加了一个约束。屏幕首次出现时,我存储了此初始垂直距离。

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

在此处输入图片说明

是的 它很丑。

而且,我对XCode 6令人痛苦的AutoLayout不仅让我们将控件的底部附加到屏幕底部还是屏幕键盘的顶部感到非常恼火/感到惊讶。

也许我想念一些东西。

除了我的理智。


实际上,即使在较旧的iOS版本上,键盘大小也总是不同。如检查笔迹中国语文
重新检测

糟糕,没有意识到这一点。我只是发现奇怪的是,如此多的“ keyboardWillShow”示例始终假定该事件仅在键盘出现或消失时才被调用一次。.没有任何功能可以应付键盘在屏幕上的情况,但是会改变其大小。
Mike Gledhill 2015年

1
@MikeGledhill我认为您应该使用“ UIKeyboardWillChangeFrameNotification”来更改由于旋转或显示(/隐藏)文本预测栏而引起的帧变化
Abdalrahman Shatou 2015年

我刚刚用我的应用程序对此进行了测试。每当我使键盘出现或打开或关闭文本预测区域时,UIKeyboardWillChangeFrameNotification始终被称为ASWELL和keyboardWillShow事件。因此,它并没有太大帮助。我的意思是……用户需要谨慎处理这些事件,仅此而已。
Mike Gledhill 2015年

1
为什么这没有引起更多关注?
rfoo 2015年

30

纵向模式下键盘高度为216点,横向模式下键盘高度为162点。

资源


135
如果您要发布自我回答的问题,请至少给出体面的答案。键盘的大小应从通知对象获取,而不是从某些网站获取的硬编码值。看到这里
jrturton

16
@jrturton问题不在于如何以编程方式找到高度。这个问题不仅对程序员有用,而且对图形设计师等也有用。您要求的答案属于另一个问题。实际上,答案还有另一个问题:stackoverflow.com/a/7302291/310121
Erik B

48
@ErikB小心点。键盘大小取决于键盘的语言和类型。
加百利

13
为了您自己,切勿使用硬编码的值!举一个有力的例子,用户可能正在使用分体式(两部分式)键盘,该键盘不太在意高度。
Timo 2013年

6
这个答案是懒惰和危险的。请从UIKeyboardDidShowNotification获取键盘高度,因为实际值在iOS主要发行版本之间趋于变化。请参阅下面的肯的答案。
亚历山大


10

键盘高度取决于型号,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
           }
    }

8

我找不到最新的答案,所以我使用模拟器进行了全部检查。(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

第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


谢谢!


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):keyboardSize =(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)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.