最近在项目中需要解决苹果系统输入法遮挡输入框的问题,预期结果为:
- 若键盘弹出后会遮挡输入框,则输入框随键盘弹起上移,输入法切换时输入框始终保持在距键盘上方 4pt 处;
- 若键盘弹出后不会遮挡输入框,但切换输入法后会遮挡输入框,则输入框需要在切换后上移,随后输入法切换时输入框始终保持在键盘上方 4pt 处。
效果示意:
一. 背景
开发环境:iOS14.2 + Xcode v12.2 + Swift5
设备:iPhoneSE(其他机型测试有效)
页面采用自动布局
二. 实现方式
在viewWillAppear中添加键盘弹出、收起、frame变化的通知
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// 键盘弹出监听,解决键盘挡住输入框的问题
NotificationCenter.default.addObserver(self,
selector: #selector(keyboardWillAppear),
name: UIResponder.keyboardWillShowNotification,
object: nil)
NotificationCenter.default.addObserver(self,
selector: #selector(keyboardHasAppear),
name: UIResponder.keyboardDidShowNotification,
object: nil)
NotificationCenter.default.addObserver(self,
selector: #selector(keyboardWillDisappear),
name: UIResponder.keyboardWillHideNotification,
object: nil)
NotificationCenter.default.addObserver(self,
selector: #selector(keyboardFrameDidChange)