我使用下面的代码在显示和隐藏键盘时上下移动屏幕
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector:#selector(ViewController.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
@objc func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
if self.view.frame.origin.y == 0{
self.view.frame.origin.y -= keyboardSize.height
}
}
}
@objc func keyboardWillHide(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
if self.view.frame.origin.y != 0{
self.view.frame.origin.y += keyboardSize.height
}
}
}
它适用于iPhone X以外的所有设备(我认为问题是iPhone X底部浪费了空间)
问题是键盘大小在显示之前和之后发生变化,导致视图上下移动...
有人可以帮忙吗?
答案 0 :(得分:0)
您还应该考虑安全区域插图
let endFrame = (userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue ?? CGRect.zero
let bottomSpace = keyboardValues.endFrame.maxY - keyboardValues.endFrame.minY - self.view.safeAreaInsets.bottom
您不应该加法。这些通知可能会多次发布。使用绝对值。
答案 1 :(得分:0)
在这里,
使用matplotlib
AppDelegate.swift设置
val listView = findViewById<ListView>(R.id.listView) as ListView.
在我的ViewController中
IQKeyboardManagerSwift
这是我管理X键盘的方式。
希望这对您有所帮助。
答案 2 :(得分:-1)
使用 UIKeyboardFrameEndUserInfoKey 代替UIKeyboardFrameBeginUserInfoKey。