键盘向上并且有一行时,将焦点对准底部单元格

时间:2017-10-04 04:34:04

标签: ios swift uitableview

我的简单聊天布局包含ViewController底部的tableview和textfield。当键盘出现时使用以下方法(向上移动视图)。当tableView中有单个项目(聊天消息)时,一切正常。

问题是当只有一行并且用户无法看到键盘向上行时。当有多行(聊天)时,这不是问题。在这种情况下,用户在键入下一条消息时不会看到最后一条消息。当键盘向我正确工作时,我想减少tableview高度。我可能使用了错误的方法。有谁能建议我这个很好的解决方案。我附上了截图

 func keyboardWillShow(notification: NSNotification) {
        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
            if self.view.frame.origin.y == 0{
                self.view.frame.origin.y -= keyboardSize.height
                self.view.layoutIfNeeded()
            }
        }
    }

    func keyboardWillHide(notification: NSNotification) {
        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
            if self.view.frame.origin.y != 0{
                self.view.frame.origin.y += keyboardSize.height
                self.view.layoutIfNeeded()
            }
        }
    }

enter image description here

2 个答案:

答案 0 :(得分:0)

<强> TPKeyboardAvoiding

TPKeyboardAvoiding库正在处理UICollectionView,UITableView,UIScrollView中的所有键盘事件

在您的项目中使用此库,您的问题将得到解决。

这是link

<强>用法

只需提供一个基于UIViewController的TPKeyboardAvoiding类(无需额外编码)

谢谢

答案 1 :(得分:0)

我通过改变视图底部约束常数来解决它。所以我不会像上面那样向上移动视图。

func keyboardWillShow(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
            self.bottomConstantTableView.constant += keyboardSize.height
            self.tableViewScrollToBottom(animated: false)
            self.view.layoutIfNeeded()
    }
}

func keyboardWillHide(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
            self.bottomConstantTableView.constant -= keyboardSize.height
            self.tableViewScrollToBottom(animated: false)
            self.view.layoutIfNeeded()
    }
}