我试图让我的应用程序在键盘出现时移动 View ,到目前为止,结果是……至少可以说是喜忧参半。我可以让它移动,问题是它要么是硬编码的,要么只能部分工作。
我的 View 中有多个文本字段,当我点击它们时,有时取决于我滚动的位置,它会被键盘隐藏。
现在我需要我的应用程序做的是仅当事件文本字段被键盘隐藏时才移动 View 以查看文本字段。
我的 View 层次结构是这样的:
所以我有一个 ScrollView ,在 ScrollView 中我有一个名为 ContentView 的 UIView,在 ContentView 中我有我所有的文本字段和标签。
问题是,我无法对其进行硬编码,因为我的应用程序是通用的,我需要让键盘仅在隐藏文本字段时移动 View 。因为在用户使用 iPad 的情况下,View 可能永远不需要移动
我使用了以下 Stack overflow 答案但没有结果:
Swift: Scroll View only when a TextField or Button is hidden by the Keyboard
Move view with keyboard using Swift
这是我的代码,实际上来自其中一个答案:
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(NewPaxController.keyboardWillShow), name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(NewPaxController.keyboardWillHide), name: UIKeyboardWillHideNotification, object: nil)
}
func keyboardWillShow(notification:NSNotification) {
if keyboardIsPresent == false {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
self.ContentView.frame.origin.y -= keyboardSize.height
keyboardIsPresent = true
}
}
}
func keyboardWillHide(notification:NSNotification) {
if keyboardIsPresent == true {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
self.ContentView.frame.origin.y += keyboardSize.height
keyboardIsPresent = false
}
}
}
我几乎 100% 确定我的所有错误都来自于我有一个 ContentView 的事实......但我需要它。预先感谢您的帮助
最佳答案
当键盘出现时,您不应该修改框架。
相反,您需要将 ScrollView scrollView.contentInset.bottom
的底部插图设置为,从零到键盘高度。当键盘消失时,您将插图设置回零。
整个问题只需 10 行代码即可解决。
从通知中获取键盘高度,在 KB 显示时将其存储在类中的局部变量中,并使用该值在委托(delegate)回调/事件处理程序方法中设置插入。
这里的诀窍是设置非零插入将有效地滚动 ScrollView 以及内容,这也会将当前文本字段向上推。
关于ios - 仅当隐藏文本字段时才使用键盘移动 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36405752/