@@ -163,15 +163,19 @@ final class ChatViewController: MessagesViewController {
163
163
override func viewDidAppear( _ animated: Bool ) {
164
164
super. viewDidAppear ( animated)
165
165
defer {
166
- state. isViewAppeared = true
166
+ state. isFirstTimeViewAppeared = true
167
+ if state. isViewDissappeared == true {
168
+ state. isViewDissappeared. toggle ( )
169
+ updateUnreadMessages ( )
170
+ }
167
171
}
168
172
inputBar. isUserInteractionEnabled = true
169
173
chatMessagesCollectionView. fixedBottomOffset = nil
170
- if !state. isViewAppeared {
174
+ if !state. isFirstTimeViewAppeared {
171
175
viewModel. presentKeyboardOnStartIfNeeded ( )
172
176
}
173
177
174
- guard isMacOS, !state. isViewAppeared else { return }
178
+ guard isMacOS, !state. isFirstTimeViewAppeared else { return }
175
179
focusInputBarWithoutAnimation ( )
176
180
}
177
181
@@ -190,6 +194,7 @@ final class ChatViewController: MessagesViewController {
190
194
? nil
191
195
: chatMessagesCollectionView. bottomOffset, collectionHeight: messagesCollectionView. contentSize. height
192
196
)
197
+ state. isViewDissappeared = true
193
198
}
194
199
195
200
override func collectionView(
@@ -229,7 +234,7 @@ final class ChatViewController: MessagesViewController {
229
234
updateDateHeaderIfNeeded ( )
230
235
}
231
236
guard
232
- state. isViewAppeared ,
237
+ state. isFirstTimeViewAppeared ,
233
238
scrollView. contentOffset. y <= viewModel. minOffsetForStartLoadNewMessages
234
239
else { return }
235
240
@@ -864,7 +869,7 @@ extension ChatViewController {
864
869
}
865
870
866
871
fileprivate func updateDateHeaderIfNeeded( ) {
867
- guard state. isViewAppeared else { return }
872
+ guard state. isFirstTimeViewAppeared else { return }
868
873
869
874
let targetY : CGFloat = targetYOffset + view. safeAreaInsets. top
870
875
let visibleIndexPaths = messagesCollectionView. indexPathsForVisibleItems
@@ -1004,9 +1009,9 @@ extension ChatViewController {
1004
1009
finalOffset += heightDiff
1005
1010
}
1006
1011
1007
- chatMessagesCollectionView. setBottomOffset ( finalOffset, safely: state. isViewAppeared )
1008
- state. isAutoScrolling = false
1009
- guard !state. isViewAppeared else { return }
1012
+ chatMessagesCollectionView. setBottomOffset ( finalOffset, safely: state. isFirstTimeViewAppeared )
1013
+ state. isAutoScrolling = false
1014
+ guard !state. isFirstTimeViewAppeared else { return }
1010
1015
chatMessagesCollectionView. fixedBottomOffset = chatMessagesCollectionView. bottomOffset
1011
1016
case let . messageId( id, scrollToBottomIfNotFound) :
1012
1017
var index = viewModel. messages. firstIndex ( where: { $0. messageId == id } )
@@ -1145,7 +1150,7 @@ extension ChatViewController {
1145
1150
)
1146
1151
}
1147
1152
1148
- if state. isViewAppeared {
1153
+ if state. isFirstTimeViewAppeared {
1149
1154
messageInputBar. inputTextView. becomeFirstResponder ( )
1150
1155
}
1151
1156
}
@@ -1179,7 +1184,7 @@ extension ChatViewController {
1179
1184
)
1180
1185
}
1181
1186
)
1182
- if state. isViewAppeared {
1187
+ if state. isFirstTimeViewAppeared {
1183
1188
messageInputBar. inputTextView. becomeFirstResponder ( )
1184
1189
}
1185
1190
}
0 commit comments