【问题标题】:UI issue when using hardware keyboard使用硬件键盘时的 UI 问题
【发布时间】:2017-05-18 18:15:44
【问题描述】:

在我的应用程序中,我有几个文本视图的表格视图,每当我单击文本视图时,它会自动向上滚动以显示键盘空间,这很好,现在问题是当我连接硬件键盘并单击文本视图时它仍然滚动为键盘空间预留空间,因此当键盘在应用程序中打开时,通常会隐藏一个空白空间。当我连接外部键盘时,应用程序可以调用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()
        })
    }

【问题讨论】:

    标签: ios swift3 ios9 uikeyboard


    【解决方案1】:

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

    【讨论】:

    • 是的,我正在使用 UIKeyboardFrameEndUserInfoKey,我已经添加了我在应用中使用的键盘通知的代码。
    猜你喜欢
    • 1970-01-01
    • 2016-12-26
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多