当键盘启动时显示文本字段
我了解我发布的问题已经讨论了很多,但就我在SO搜索中找不到针对我的问题的解决方案。我发布这个来获得一些输入。当键盘启动时显示文本字段
问题:
景观层次:查看 - >滚动型 - >查看 - >文本字段
我已经实现了两个屏幕与铺设在顶部多个文本框滚动视图可避免键盘在页面底部遮挡文本框。我使用Apple提供的示例代码稍作修改就实现了这一点。
- 订阅
UIKeyboardWillShowNotification
和UIKeyboardWillHideNotification
- 当显示键盘,从
userInfo
字典获取键盘的高度,并设置适当的内容嵌入到移动键盘 - 当键盘被隐藏,将上面的文本框内容插入到
UIEdgeInsetZero
,以恢复正常大小
上面的实现工作完全正常,当有更多的文本域可以占用整个屏幕(假设有10个文本字段,并且它们超出了滚动视图的框架)。每当我点击一个文本框时,它会按照预期移动到键盘上方,我也可以滚动页面直到键盘框架上方最下方的文本框可见(键盘仍然弹起时)。
我的问题出现在屏幕上垂直居中的滚动视图中只有两个文本框。当我点击一个文本框时,scrollview会得到一个与键盘高度相当的插图,并且它按照预期在键盘之上移动,但是当我滚动屏幕时,我可以看到文本框下面有一个巨大的空白空间(由于附加插入)。
当页面中只有一个或两个文本框时,如何避免该空白区域?我是否需要编写不同的逻辑来处理这种情况?任何帮助,将不胜感激。
下面是代码:
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name: UIKeyboardWillHideNotification, object: nil)
}
func keyboardWillShow(notification: NSNotification) {
if let userInfo = notification.userInfo {
let keyboardFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue()
if let kbFrame = keyboardFrame {
let inset = CGRectGetHeight(kbFrame)
scrollView.contentInset = UIEdgeInsetsMake(0, 0, inset, 0)
scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, inset, 0)
}
}
}
func keyboardWillHide(notfication: NSNotification) {
scrollView.contentInset = UIEdgeInsetsZero
scrollView.scrollIndicatorInsets = UIEdgeInsetsZero
}
有许多在那里的解决方案,但我的首选解决方案是使用TPKeyboardAvoiding。要在这里使用它,您只需在SB或代码中将UIScrollView
作为TPKeyboardAvoidingScrollView
的一个实例或子类,并且它应该关心其余部分,不需要其他代码!
TPKeyboardAvoidingScrollView是好的,但最近我切换到IQKeyboardManager - >https://github.com/hackiftekhar/IQKeyboardManager
其高达您选择,但我更喜欢IQKeyboardManager导致其容易
你是否觉得它更好,或者只是你一次调用它而不必设置你想要使用它的类? – sschale
http://stackoverflow.com/a/28813720/5097148 –