     }()
 
     private let messagesBunchCount = 20 // TODO: 分段载入的“一束”消息的数量
-    private var displayedMessagesRange = NSRange()
+    private var displayedMessagesRange = NSRange() {
+        didSet {
+            needShowLoadPreviousSection = displayedMessagesRange.length >= messagesBunchCount
+        }
+    }
+    private var needShowLoadPreviousSection: Bool = false {
+        didSet {
+            if needShowLoadPreviousSection != oldValue {
+                needReloadLoadPreviousSection = true
+            }
+        }
+    }
+    private var needReloadLoadPreviousSection: Bool = false
 
     // 上一次更新 UI 时的消息数
     private var lastTimeMessagesCount: Int = 0

                switch messageAge {

                case .New:
                    conversationCollectionView.insertItemsAtIndexPaths(indexPaths)

                case .Old:
                    let bottomOffset = conversationCollectionView.contentSize.height - conversationCollectionView.contentOffset.y


        displayedMessagesRange.length += newMessagesCount

        let needReloadLoadPreviousSection = self.needReloadLoadPreviousSection

        // 异常：两种计数不相等，治标：reload，避免插入
        if let messageIDs = messageIDs {
            if newMessagesCount != messageIDs.count {
