浏览代码

resize table view size instead of translating the view after keyboard appeared

cyberta 4 年之前
父节点
当前提交
bf0f146e36
共有 1 个文件被更改,包括 13 次插入7 次删除
  1. 13 7
      deltachat-ios/Chat/ChatViewControllerNew.swift

+ 13 - 7
deltachat-ios/Chat/ChatViewControllerNew.swift

@@ -17,6 +17,8 @@ class ChatViewControllerNew: UITableViewController {
     var incomingMsgObserver: Any?
     var ephemeralTimerModifiedObserver: Any?
 
+    var originFrame: CGRect?
+
     /// The `InputBarAccessoryView` used as the `inputAccessoryView` in the view controller.
     open var messageInputBar = InputBarAccessoryView()
 
@@ -145,18 +147,22 @@ class ChatViewControllerNew: UITableViewController {
     }
 
     @objc func keyboardWillShow(_ notification: Notification) {
-        if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
-            if self.view.frame.origin.y == 0 && tableView.inputAccessoryView?.frame.height ?? 0 < keyboardSize.height {
-                self.view.frame.origin.y -= keyboardSize.height
+        if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue,
+           tableView.inputAccessoryView?.frame.height ?? 0 < keyboardSize.height {
+            originFrame = self.tableView.frame
+            if let originFrame = originFrame {
+                self.tableView.frame = CGRect(origin: originFrame.origin,
+                                              size: CGSize(width: originFrame.width, height: originFrame.height - keyboardSize.height))
+                self.scrollToBottom(animated: false)
             }
         }
     }
 
     @objc func keyboardWillHide(_ notification: Notification) {
-        if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
-            if self.view.frame.origin.y != 0 {
-                self.view.frame.origin.y += keyboardSize.height
-            }
+        if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue,
+           keyboardSize.height == 0,
+           let originFrame = originFrame {
+            self.tableView.frame = originFrame
         }
     }