使用硬件键盘时的UI问题

时间:2017-05-18 18:15:45

标签: ios swift3 ios9 uikeyboard

在我的应用程序中我有多个文本视图的表格视图,每当我点击文本视图时,它会自动滚动键盘空间,工作正常,现在的问题是当我连接硬件键盘并单击textview时仍然向上滚动键盘空间,因此还有一个空白区域,通常在键盘在应用程序中时隐藏。当我连接外部键盘时,应用程序可以呼叫UIKeyboardWillShowNotification,但无法呼叫UIKeyboardWillHideNotification。我们可以避免空白吗?

以下是我的键盘通知处理方式的示例代码

func keyboardWillShow(_ notification:Notification)
    {

        if myTextField.isFirstResponder {

            self.tableView.frame.size.height = view.frame.size.height

            if let userInfo = (notification as NSNotification).userInfo
            {
                if let keyboardRect = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue
                {
                    mainScrollView.frame.size.height = view.frame.size.height - keyboardRect.size.height
                    tableViewTopConstraint.constant = keyboardRect.size.height-myView.submitViewHeightConstraint.constant
                }
            }
        }
        else{

            self.mainScrollView.frame.size.height = view.frame.size.height

            if let userInfo = (notification as NSNotification).userInfo
            {
                if let keyboardRect = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue
                {
                   self.tableView.frame.size.height = view.frame.size.height + myView.frame.size.height - keyboardRect.size.height

                }
            }
        }
    }

    func keyboardWillHide(_ notification:Notification){
        tableViewTopConstraint.constant = 0.0
        tableView.frame.size.height = view.frame.size.height - myView.frame.size.height
        mainScrollView.frame.size.height = view.frame.size.height
        DispatchQueue.main.async(execute: {
            self.tableView.reloadData()
        })
    }

1 个答案:

答案 0 :(得分:0)

确保仅在实际的屏幕键盘存在时调整视图的最简单方法是响应UIKeyboardWillChangeFrame通知。另一件事是,如果您实际使用的是您正在响应的通知中的布局信息,那么您不应该得到任何空格。你在使用UIKeyboardFrameEndUserInfoKey吗?如果您尝试对框架进行硬编码,这应该可以避免任何空白。