我正在尝试将整个视图向上移动,以便能够看到用户在文本字段中键入的内容。但是,它第一次按我的意愿完美运行。但是,当单击键盘上的返回键(将其关闭),然后单击文本字段时,我将键盘稍微移到文本字段上方,而得到的结果却与第一次相同。为什么会这样?
这是我的代码:
@IBOutlet weak var commentTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
commentTextField.delegate = self
//Keyboard listeners
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: NSNotification.Name.UIKeyboardDidHide, 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 self.view.frame.origin.y != 0 {
self.view.frame.origin.y = 0
}
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
commentTextField.resignFirstResponder()
return true
}
答案 0 :(得分:2)
替换
UIKeyboardFrameBeginUserInfoKey
使用
UIKeyboardFrameEndUserInfoKey
答案 1 :(得分:1)
您正在误调用变量。
UIKeyboardFrameBeginUserInfoKey
包含CGRect的NSValue对象的键,该CGRect标识了 屏幕坐标中键盘的起始帧矩形。的 框架矩形反映了设备的当前方向。
UIKeyboardFrameEndUserInfoKey
包含CGRect的NSValue对象的键,该CGRect标识了 屏幕坐标中键盘的 end 边框矩形。的 框架矩形反映了设备的当前方向。
因此,您需要检查UIKeyboardFrameEndUserInfoKey而不是UIKeyboardFrameBeginUserInfoKey。
进行替换,您可能会解决它。