【发布时间】:2018-03-07 07:48:17
【问题描述】:
我使用下面的代码来获取键盘高度。然后使用这个高度来计算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。
【问题讨论】:
-
您的问题究竟是什么?您在问题中要求基于意见的推测。
-
您总是可以使用
rect.height来计算剩余的? -
@holex 我编辑了我的问题。我的问题是我无法通过通知中的
rect.height获得正确的键盘高度。 -
@zcui93
rect.height通常应该是键盘高度。 -
@zcui93 你说得对,我认为 iPhone X 的矩形高度不再是键盘高度。应该加上底部。