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

Eri*_*k B 83 iphone keyboard height ios

纵向高度和景观高度以点为单位.

Ken*_*son 210

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

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

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

然后,我使用以下代码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));
 }
Run Code Online (Sandbox Code Playgroud)

迅速

与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)")
}
Run Code Online (Sandbox Code Playgroud)

以及计算键盘大小的方法:

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

Swift 2.0

-(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));
 }
Run Code Online (Sandbox Code Playgroud)

以及计算键盘大小的方法:

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)")
}
Run Code Online (Sandbox Code Playgroud)

Swift 3.0

观察

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

方法

-(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));
 }
Run Code Online (Sandbox Code Playgroud)

  • 虽然看起来有点涉及这肯定比硬编码键盘大小更好.正确答案. (4认同)
  • 没有键盘出现,有没有办法做到这一点?在我的情况下,我想在键盘后面有一些高度相同的东西(类似于信使的东西) (3认同)
  • 投票给出了这个答案,并对这个问题进行了投票.OP绝对不知道他在说什么.小心的家伙们!这个答案是正确的答案! (2认同)
  • Landscape的一个补码:if(SYSTEM_VERSION_LESS_THAN(@"8.0")){_ keyboardHeight = keyboardFrame.size.width; } else {_keyboardHeight = keyboardFrame.size.height; } (2认同)

Mik*_*ill 46

请记住,对于iOS 8,屏幕键盘的大小可能会有所不同.不要以为屏幕键盘始终可见(具有特定高度)或不可见.

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

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

在此输入图像描述

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

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

练习AutoLayout

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

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

在此输入图像描述

是啊.它很丑.

我有点恼火/感到惊讶的是,XCode 6的可怕痛苦的AutoLayout不仅允许我们将控件的底部连接到屏幕的底部或屏幕键盘的顶部.

也许我错过了一些东西.

除了我的理智.


Eri*_*k B 33

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

资源

  • 如果你要发表自我回答的问题,至少给出合适的答案.键盘的大小应该从通知对象获得,而不是从某个网站获取的硬编码值.见[这里](http://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UIWindow_Class/UIWindowClassReference/UIWindowClassReference.html#//apple_ref/doc/constant_group/Keyboard_Notification_User_Info_Keys) (133认同)
  • @ErikB小心点.键盘大小取决于键盘的语言和类型. (47认同)
  • @jrturton问题不在于如何以编程方式找到高度.这个问题不仅对程序员有用,对图形设计师也有用.你要求的答案属于另一个问题.事实上,还有另一个问题:stackoverflow.com/a/7302291/310121 (16认同)
  • 为了您自己,切勿使用硬编码值!作为一个强有力的示例,用户可能正在使用分离(两部分)键盘,其不关心高度. (13认同)
  • 这个答案是懒惰和危险的.请从UIKeyboardDidShowNotification获取键盘高度,因为实际值往往会在iOS主要版本之间发生变化.见Ken的答案如下. (6认同)
  • 在iOS 8中,它的224.0.更好地使用通知! (4认同)
  • 这个答案是对的.你不能认为键盘将是一个特定的高度 - 你必须测量它.请参阅此主题中其他位置的截图,了解为什么不能使用固定高度. (4认同)
  • @jrturton请查看:http://stackoverflow.com/questions/4213878/what-is-the-height-of-ipads-onscreen-keyboard.我只发布了这个问题,因为有人给出了iPhone的高度答案,我认为iPhone也应该有一个问题. (3认同)

Phi*_*der 16

版本说明:这不再是iOS 9和10中的值,因为它们支持自定义键盘大小.

这取决于型号和QuickType栏:

在此输入图像描述

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


小智 10

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

Swift 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
           }
    }
Run Code Online (Sandbox Code Playgroud)


Seu*_* Yi 7

我找不到最新的答案,所以我用模拟器检查一下.(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

iPad第5代,iPad Air,iPad Air 2,iPad Pro 9.7,iPad Pro 10.5,iPad Pro 12.9 | 1024.0 | 265.0 | 353.0


谢谢!