0

为了提供聊天功能,我使用了一个表格视图,它连续显示每条消息。当显示键盘时,我将内容偏移 y 值向上推。这样,当键盘打开时,您可以阅读的最后一条消息仍然可见。当您打开表情符号键盘时会出现问题,它会再次触发 keyboardWasShown 函数并从当前位置计算它。这会导致 tableview 内容高于所需。当显示键盘/可以显示不同类型的键盘时,处理 tableview 内容偏移的智能方法是什么?

func keyboardWasShown(_ notification: Notification){
let oldOffset = self.tableViewChat?.tableView.contentOffset.y
    let info = (notification as NSNotification).userInfo
    let value = info?[UIKeyboardFrameEndUserInfoKey]

    if let rawFrame = (value as AnyObject).cgRectValue
    {
        let keyboardFrame = self.tableViewChat?.tableView.convert(rawFrame, from: nil)
        let keyboardHeight = keyboardFrame?.height
        self.bottomConstraint.constant = keyboardFrame!.size.height - (self.navigationController!.navigationBar.frame.height)
        self.sendButtonBottom.constant = self.bottomConstraint.constant

        let currentOffset = self.tableViewChat?.tableView.contentOffset.y

        self.tableViewChat?.tableView.setContentOffset(CGPoint(x: 0, y: (currentOffset! + keyboardHeight! - 52)), animated: true)
    }
}
4

0 回答 0