iPhone屏幕键盘的高度是多less?
肖像的高度和景观的高度以点为单位。
我用下面的方法来确定iOS 7.1中的键盘的框架。
在我的视图控制器的init方法中,我注册了UIKeyboardDidShowNotification
:
NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; [center addObserver:self selector:@selector(keyboardOnScreen:) name:UIKeyboardDidShowNotification object:nil];
然后,我在keyboardOnScreen:
使用了以下代码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等价的实现…订阅通知:
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardShown:", name: UIKeyboardDidShowNotification, object: nil)
以及计算键盘大小的方法:
func keyboardShown(notification: NSNotification) { let info = notification.userInfo! let value: AnyObject = info[UIKeyboardFrameEndUserInfoKey]! let rawFrame = value.CGRectValue() let keyboardFrame = view.convertRect(rawFrame, fromView: nil) println("keyboardFrame: \(keyboardFrame)") }
Swift 2.0
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardShown:", name: UIKeyboardDidShowNotification, object: nil)
以及计算键盘大小的方法:
func keyboardShown(notification: NSNotification) { let info = notification.userInfo! let value: AnyObject = info[UIKeyboardFrameEndUserInfoKey]! let rawFrame = value.CGRectValue let keyboardFrame = view.convertRect(rawFrame, fromView: nil) print("keyboardFrame: \(keyboardFrame)") }
SWIFT 3.0
观察
NotificationCenter.default.addObserver(self, selector: #selector(keyboardShown), name:NSNotification.Name.UIKeyboardWillShow, object: nil);
方法
func keyboardShown(notification: NSNotification) { let info = notification.userInfo! let keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue print("keyboardFrame: \(keyboardFrame)") }
纵向模式的键盘高度为216pts,横向模式的键盘高度为162pts。
资源
请记住,在iOS 8中,屏幕键盘的大小可能会有所不同。 不要认为屏幕上的键盘总是可见的(具有特定的高度)或不可见的。
现在,在iOS 8中,用户也可以打开和closures文本预测区域,当他们这样做时,会再次启动应用程序的keyboardWillShow
事件。
这将破坏大量的遗留代码示例,这些示例build议您编写一个keyboardWillShow
事件,该事件仅测量屏幕键盘的当前高度,并将该控件在页面上向上或向下移动此(绝对)量。
换句话说,如果你看到任何示例代码,它只是告诉你添加一个keyboardWillShow
事件,测量键盘高度,然后调整你的控件的高度这个数量,这将不再总是工作。
在我上面的例子中,我使用了来自以下站点的示例代码,它激活了垂直约束constant
量值。
练习AutoLayout
在我的应用程序中,我添加了一个约束到我的UITextView
,设置在屏幕的底部。 当屏幕第一次出现时,我保存了这个初始的垂直距离。
然后,每当我的keyboardWillShow
事件开始时,我将 (新)键盘高度添加到这个原始约束值(所以约束调整控件的高度)。
是啊。 它很丑。
XCode 6令人痛苦的AutoLayout让我们不仅能够将控件的底部连接到屏幕底部或屏幕键盘的顶部,而且我对此感到有点恼火/惊讶。
也许我错过了一些东西。
除了我的理智。
版本说明:这在iOS 9和10中不再有用,因为它们支持自定义键盘大小。
这取决于模型和QuickType栏:
键盘高度取决于型号,QuickType栏,用户设置…最好的方法是计算dinamically:
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 } }
我找不到最新的答案,所以我使用模拟器进行检查(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第五代,iPad Air,iPad Air 2,iPad Pro 9.7,iPad Pro 10.5,iPad Pro 12.9 | 1024.0 | 265.0 | 353.0
谢谢!