关于ios:键盘启动时显示文本字段

Showing Textfield when Keyboard is up

我知道我发布的问题已经讨论了很多,但据我搜索过,我找不到特定于我的问题的解决方案。我发布这个以获得一些输入。

问题:

View hierarchy: View -> ScrollView -> View -> Textfield

我已经实现了两个屏幕,其中多个文本字段放在滚动视图的顶部,以避免键盘在页面底部遮挡文本字段。我使用Apple提供的示例代码进行了少量修改。

  • 订阅UIKeyboardWillShowNotificationUIKeyboardWillHideNotification
  • 显示键盘时,从userInfo字典中获取键盘的高度并设置适当的内容插入以移动键盘上方的文本字段
  • 隐藏键盘时,将内容插入设置为UIEdgeInsetZero以恢复正常大小
  • 当有更多的文本字段可以占据整个屏幕时,上述实现工作得非常好(假设有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或代码中使UIScrollView成为TPKeyboardAvoidingScrollView的实例或子类,它应该关心其余部分,不需要其他代码!