瀏覽代碼

don't scroll down if user returns from subscreen to chat view and user was not at the end of the list before

cyberta 4 年之前
父節點
當前提交
d7317a7c4f
共有 1 個文件被更改,包括 14 次插入1 次删除
  1. 14 1
      deltachat-ios/Chat/ChatViewControllerNew.swift

+ 14 - 1
deltachat-ios/Chat/ChatViewControllerNew.swift

@@ -508,9 +508,22 @@ class ChatViewControllerNew: UITableViewController {
         DispatchQueue.global(qos: .userInitiated).async {
         DispatchQueue.global(qos: .userInitiated).async {
             DispatchQueue.main.async { [weak self] in
             DispatchQueue.main.async { [weak self] in
                 guard let self = self else { return }
                 guard let self = self else { return }
+                // keep old message ids for comparison
+                let oldLastMessageId = self.messageIds.last
+                var oldLastVisibleMessageId: Int?
+                if let lastRowIndex = self.tableView.indexPathsForVisibleRows?.last?.row {
+                    oldLastVisibleMessageId = self.messageIds[lastRowIndex]
+                }
+                // update message ids
                 self.messageIds = self.getMessageIds()
                 self.messageIds = self.getMessageIds()
                 self.tableView.reloadData()
                 self.tableView.reloadData()
-                self.scrollToBottom(animated: false)
+                // scroll down if the table view was emtpy before or
+                // the user was at the end of the list before the update
+                if oldLastMessageId == nil ||
+                    (oldLastVisibleMessageId != nil &&
+                        oldLastVisibleMessageId == oldLastMessageId) {
+                    self.scrollToBottom(animated: false)
+                }
                 self.showEmptyStateView(self.messageIds.isEmpty)
                 self.showEmptyStateView(self.messageIds.isEmpty)
             }
             }
         }
         }