启动添加监听
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)
// 键盘弹出时调整视图位置
@objc func keyboardWillShow(_ notification: Notification) {
guard let userInfo = notification.userInfo,
let keyboardFrame = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect,
let duration = userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval else {
return
}
let keyboardHeight = keyboardFrame.height
// 计算键盘弹出后的视图偏移量
let inputViewBottomY = self.view.frame.origin.y + self.view.frame.size.height
let keyboardY = UIScreen.main.bounds.height - keyboardHeight
let offsetY = inputViewBottomY - keyboardY
if offsetY > 0 {
UIView.animate(withDuration: duration) {
self.view.frame.origin.y -= offsetY
}
}
}
// 键盘收起时恢复视图位置
@objc func keyboardWillHide(_ notification: Notification) {
guard let userInfo = notification.userInfo,
let duration = userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval else {
return
}
UIView.animate(withDuration: duration) {
self.view.frame.origin.y = 0
}
}