iPhoneX和iPhone 8的键盘高度不同
我使用下面的代码来获得键盘高度。 然后使用此高度计算UIView
的框架,以确保此UIView
位于键盘顶部。
但在iPhoneX模拟器中,输出为333
,而iPhone 8模拟器为258
。
问题 :如果使用rect.height
作为iPhone 8模拟器的键盘高度,那么布局是正确的。 对于iPhone X, UIView
和键盘之间存在差距。 这意味着333
高于iPhone X中的真实键盘高度。
高度的原因是什么? 以及如何获得正确的键盘高度?
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil) @objc func keyboardWillShow(_ notification: NSNotification) { if let rect = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { print(rect.height) } }
像这张图片一样,绿色边框应该是额外的部分。 实际上,我需要键盘顶部的红色部分没有绿色矩形间隙。
编辑
好的,在@ Craig的帮助下,我发现这个方法只能由iPhone X调用。所以我在这里更新框架。 只需在此处粘贴代码即可。
安全区底部高度为22.0似乎不正确。
override func viewSafeAreaInsetsDidChange() { if #available(iOS 11.0, *) { super.viewSafeAreaInsetsDidChange() view.safeAreaInsets.bottom // This value is the bottom safe area place value. } }
EDIT2通常view.safeAreaInsets.bottom
应该是34.0,但如果你使用容器视图,这个值可能会有所不同,就像我的22.0。
iPhone X和iPhone 8的键盘高度应该是正确的。 我只能猜测你的代码中可能存在定位“红色部分”的问题,你的假设是键盘高度不正确,而问题实际上是在视图的位置 。 现在 – 位置问题的原因? 我的第二个猜测是红色部分固定在底部安全区域布局指南,其中iPhone 8为0,但在iPhone X上嵌入34点。
请参阅此图像以说明键盘高度的差异,并且可以使用键盘高度在键盘上方绘制一个矩形,使用键盘高度,该高度来自键盘高度,该高度来自于keyboardWillShow
方法的NSNotification
:
如果你想分享你的代码/约束来定位红色视图,我应该能够向你展示问题。
虽然Craig的答案是正确的,但您可能不希望将视图固定在view.bottom或bottomLayoutGuide而不是安全区域底部 (特别是如果您的键盘并不总是打开,并且您不希望您的视图覆盖Home Indicator)区)。
以下是针对这些案例的修复方法。 它从键盘的高度减去安全区域底部插入的高度:
var keyboardHeight = ... // Get the keyboard height from keyboard notification if #available(iOS 11.0, *) { let bottomInset = view.safeAreaInsets.bottom keyboardHeight -= bottomInset }