提问人:Zachary Bell 提问时间:5/25/2023 更新时间:5/25/2023 访问量:59
iOS 调整底部约束常数,当键盘可见在较新型号的 iPhone 上具有较大的偏移量时
iOS adjusting bottom constraint constant of view when keyboard visible has a larger offset on newer model iPhones
问:
我正在设置我的键盘将显示通知器,获取键盘高度,并在底部约束上设置常量值,如下所示:
通知观察者
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
键盘将显示功能
@objc func keyboardWillShow(notification: NSNotification) {
guard let keyboardFrame = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else {
return
}
_keyboardHeight = keyboardFrame.cgRectValue.height
changeStateContainerBottomConstraint.constant = _keyboardHeight
}
但是,在较新型号的手机上,我得到的值是将视图置于高于键盘顶部的位置,如下面的屏幕截图所示。我犹豫是否要用静态值调整约束,因为将来可能会发生变化,或者从一个模型到另一个模型。有没有人遇到过这个问题并有解决方案?
答:
-2赞
Md. Sulayman
5/25/2023
#1
我建议你看看这个框架,它是处理这种东西的最流行的库。只需几行代码即可轻松使用,就像在 AppDelegate 文件中一样。https://github.com/hackiftekhar/IQKeyboardManager
IQKeyboardManager.shared.enable = true
评论
0赞
Zachary Bell
5/25/2023
我更喜欢本机解决方案。我过去发现,严重依赖第 3 部分库并不是很可持续。
0赞
Zachary Bell
5/25/2023
#2
看起来我已经找到了一个可行的解决方案。只需要找到安全区域插图的底部值,然后从返回的高度中减去它。这是现在的样子keyboardWillShow
@objc func keyboardWillShow(notification: NSNotification) {
guard let keyboardFrame = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else {
return
}
_keyboardHeight = keyboardFrame.cgRectValue.height
let bottom: CGFloat = UIApplication.shared.delegate?.window??.safeAreaInsets.bottom ?? 0
changeStateContainerBottomConstraint.constant = _keyboardHeight - bottom
}
评论
0赞
HangarRash
5/25/2023
更简单的解决方案是使用 .有关示例,请参见 stackoverflow.com/a/69145739/20287183。keyboardLayoutGuide
评论