我的简单聊天布局包含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()
}
}
}
答案 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()
}
}