【发布时间】:2016-07-24 04:15:43
【问题描述】:
我正试图让我的应用程序在键盘出现时移动视图,到目前为止,结果...至少可以说是混杂的。我可以让它移动,问题是它要么是硬编码的,要么只能部分工作。
我的视图中有多个文本字段,当我点击它们时,有时取决于我的滚动位置,它会被键盘隐藏。
现在我需要我的应用程序做的是仅当活动文本字段被键盘隐藏时才移动视图以查看文本字段。
我的视图层次结构如下:
所以我有一个滚动视图,在滚动视图中我有一个名为 ContentView 的 UIView,在 ContentView 中我有我所有的文本字段和标签。
问题是,我无法对其进行硬编码,因为我的应用程序是通用的,只有当它隐藏文本字段时,我才需要让键盘移动视图。因为在用户使用 iPad 的情况下,视图可能永远不必移动
我使用了以下堆栈溢出答案但没有结果:
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 的事实......但在我的情况下我需要它。提前感谢您的帮助
【问题讨论】:
-
如果我给你Objective c中的代码,会有帮助吗?我不知道斯威夫特
-
确实可以!我不知道目标 C,但我可能可以从中得到正确的想法。另外,我之前已经转换了 Obj-C 代码以满足我的需求!如果我迷路了,我会通知你
-
问题是不管文本字段是否隐藏,它总是移动视图?
-
是的!同样,当我关闭键盘时,视图会向下滚动太多,留下一个空白空间,其上方的键盘高度
标签: ios swift user-interface uiscrollview keyboard