第一种方法(便捷方法):
1)在一个原生UITableView或者是继承了该UITableView之后的的view上添加一个textField,点击textFIeld会自动上移视图
系统原生的UITableViewController 是有一个功能:点击其中的textField如果上弹的键盘视图遮盖住了textField那么整个UITableView会有一个上移的效果,直到键盘视图不会遮盖住textField。
2)滑动tableView下移键盘视图
i.利用代码设置滑动tableView下移键盘
第二种方法(手写通知):
第一步:在你要实现这个功能的视图控制器中的viewDidload()中添加一个要监听的通知(这里为键盘上弹通知)
func addObserver(_ observer: Any, selector aSelector: Selector, name aName: NSNotification.Name?, object anObject: Any?)
在这个方法中添加通知
NotificationCenter.default.addObserver(self, selector: #selector(self.kbFrameChanged(_:)), name: .UIKeyboardWillChangeFrame, object: nil)
需要禁停通知的对象是本身(self) , 收到通知之后要执行的函数是 kbFrameChanged(_:) 要被监听的通知的名称是 .UIKeyboardWillChangeFrame 传递的参数是 nil (不存在)
第二步:收到通知后需要调用的方法
func kbFrameChanged(_ notification : Notification){
let info = notification.userInfo
let kbRect = (info?[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
let offsetY = kbRect.origin.y - UIScreen.main.bounds.height
UIView.animate(withDuration: 0.3) {
self.view.transform = CGAffineTransform(translationX: 0, y: offsetY)
}
}
然后利用键取出其中有关键盘Frame的信息
之后由于需要让键盘弹出后整个视图上移,而上移的Y的偏移应该是负值所以要用 y-屏幕高度
最后利用动画展示随着键盘上移,视图上移的过程
以下是 notification.userInfo 中所有的内容
[AnyHashable("UIKeyboardCenterBeginUserInfoKey"): NSPoint: {187.5, 667},
AnyHashable("UIKeyboardIsLocalUserInfoKey"): 1,
AnyHashable("UIKeyboardCenterEndUserInfoKey"): NSPoint: {187.5, 667},
AnyHashable("UIKeyboardBoundsUserInfoKey"): NSRect: {{0, 0}, {375, 0}},
AnyHashable("UIKeyboardFrameEndUserInfoKey"): NSRect: {{0, 667}, {375, 0}},
AnyHashable("UIKeyboardAnimationCurveUserInfoKey"): 7,
AnyHashable("UIKeyboardFrameBeginUserInfoKey"): NSRect: {{0, 667}, {375, 0}},
AnyHashable("UIKeyboardAnimationDurationUserInfoKey"): 0.25]
[AnyHashable("UIKeyboardCenterBeginUserInfoKey"): NSPoint: {187.5, 667},
AnyHashable("UIKeyboardIsLocalUserInfoKey"): 1,
AnyHashable("UIKeyboardCenterEndUserInfoKey"): NSPoint: {187.5, 532.5},
AnyHashable("UIKeyboardBoundsUserInfoKey"): NSRect: {{0, 0}, {375, 269}},
AnyHashable("UIKeyboardFrameEndUserInfoKey"): NSRect: {{0, 398}, {375, 269}},
AnyHashable("UIKeyboardAnimationCurveUserInfoKey"): 7,
AnyHashable("UIKeyboardFrameBeginUserInfoKey"): NSRect: {{0, 667}, {375, 0}},
AnyHashable("UIKeyboardAnimationDurationUserInfoKey"): 0]