swift - 出现键盘时快速屏幕移动
问题描述
我的屏幕上有一个文本视图和一个文本字段,我想在编辑文本视图时移动屏幕。这是我的代码
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: .UIKeyboardWillShow, object: nil)
// NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: .UIKeyboardWillHide, object: nil)
print("addd observer")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillShow, object: nil)
// NotificationCenter.default.removeObserver(self, name: .UIKeyboardWillHide, object: nil)
}
@objc func keyboardWillShow(_ sender: Notification) {
let keyboardSize = (sender.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue
print("keyboardwillshow")
ksize = keyboardSize?.height
}
@objc func textViewDidBeginEditing(_ textView: UITextView) {
print("textviewedit")
boxview.frame.origin.y -= ksize
print("textview")
}
@objc func textViewDidEndEditing(_ textView: UITextView) {
print("textvieweditend")
boxview.frame.origin.y = 0
}
当我只编辑 textview 时它可以工作。但是,如果我在关注文本字段(没有退出键盘)后立即编辑文本视图,它不起作用。我已经检查过,textviewDidBeginEditing()
但屏幕没有移动..我该如何解决这个问题?欢迎所有建议!
解决方案
我添加self.view.Layoutifneeded()
到keyboardwillchange()并且它有效!谢谢大家。
推荐阅读
- r - 改变列值而不是列名
- feathersjs - 如何在feathersJs中的单个api调用中从两个或多个mongo模式中获取数据?
- docker - 来自守护进程的错误响应:Mount denied - 运行昨晚工作的 docker 应用程序时出错
- javascript - 如何在 JavaScript 中平滑更改背景(动画)?
- python - 用于 NLP 的 Python 知识图
- python - print 函数如何在函数内部工作?
- virtualization - SLAT 在 HV 中可以避免吗?
- algolia - Algolia Places API:如何获取某个地方的街道?
- python - 使用 numpy 数组加速 pandas 数据帧中的迭代
- javascript - 在实例对象内的函数中获取类(this)的实例 - 打字稿/角度