1.注册/移除通知:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(keyBoardWillShow(_:)), name:NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyBoardWillHide(_:)), name:NSNotification.Name.UIKeyboardWillHide, object: nil)
}
deinit {
//移除通知
NotificationCenter.default.removeObserver(self)
}
2.实现通知的方法:
//键盘的出现
func keyBoardWillShow(_notification: Notification){
//获取userInfo
let kbInfo = notification.userInfo
//获取键盘的size
let kbRect =(kbInfo?[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
//键盘的y偏移量
let changeY = kbRect.origin.y -SCREEN_HEIGHT
//键盘弹出的时间
let duration =kbInfo?[UIKeyboardAnimationDurationUserInfoKey] as!Double
//界面偏移动画
UIView.animate(withDuration: duration) {
self.aTableView.transform= CGAffineTransform(translationX: 0, y:changeY)
}
}
//键盘的隐藏
func keyBoardWillHide(_notification: Notification){
let kbInfo = notification.userInfo
let kbRect =(kbInfo?[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
/*
* let kbRect = (userInfo![UIKeyboardFrameEndUserInfoKey] as AnyObject).cgRectValue
* swift2.3正常,swift3.0取值为nil
*/
let changeY = kbRect.origin.y
let duration =kbInfo?[UIKeyboardAnimationDurationUserInfoKey] as!Double
UIView.animate(withDuration: duration) {
self.tableViewConstraint.update(inset:0)
}
}
思路整理:
1.view消失,检查frame的origin
2.第一思路:closure没有捕获变量;错误
第二思路:notification.userInfo有值;有UIKeyboardFrameEndUserInfoKey键,有value;
查看新的取值方法。
本文介绍如何使用Swift通过观察系统通知来响应键盘显示和隐藏事件,包括注册和移除通知监听器,以及如何根据键盘大小调整界面布局。
554

被折叠的 条评论
为什么被折叠?



