Showing Textfield when Keyboard is up
我知道我发布的问题已经讨论了很多,但据我搜索过,我找不到特定于我的问题的解决方案。我发布这个以获得一些输入。
问题:
View hierarchy: View -> ScrollView -> View -> Textfield
我已经实现了两个屏幕,其中多个文本字段放在滚动视图的顶部,以避免键盘在页面底部遮挡文本字段。我使用Apple提供的示例代码进行了少量修改。
当有更多的文本字段可以占据整个屏幕时,上述实现工作得非常好(假设有10个文本字段并且它们超出了滚动视图的框架)。每当我点击文本字段时,它会按预期移动到键盘上方,我也可以滚动页面,直到键盘框架上方可见最底部的文本字段(当键盘仍然处于运行状态时)。
当我在滚动视图中只有两个文本字段在屏幕中垂直居中时,我的问题就出现了。当我点击文本字段时,滚动视图得到一个等于键盘高度的插图,它按预期移动到键盘上方但当我滚动屏幕时,我可以在文本字段下方看到一个巨大的空白区域(由于附加插页)。
当页面中只有一个或两个文本字段时,如何避免该空格?我是否应该编写不同的逻辑来处理这种情况?任何帮助,将不胜感激。
以下是代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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 } |
TPKeyboardAvoidingScrollView很好,但我最近切换到IQKeyboardManager - > https://github.com/hackiftekhar/IQKeyboardManager
它可以选择,但我更喜欢IQKeyboardManager因为它很容易
有很多解决方案,但我首选的解决方案是使用TPKeyboardAvoiding。 要在这里使用它,你只需要在SB或代码中使