diff --git a/apps/ios/Shared/Views/Chat/ReverseList.swift b/apps/ios/Shared/Views/Chat/ReverseList.swift index 2e09909c5e..29a09a9429 100644 --- a/apps/ios/Shared/Views/Chat/ReverseList.swift +++ b/apps/ios/Shared/Views/Chat/ReverseList.swift @@ -10,6 +10,12 @@ import SwiftUI import Combine import SimpleXChat +enum ChatScrollDirection { + case toLatest + case toOldest + case none +} + /// A List, which displays it's items in reverse order - from bottom to top struct ReverseList: UIViewControllerRepresentable { let items: Array @@ -50,6 +56,8 @@ struct ReverseList: UIViewControllerRepresentable { private var itemCount: Int = 0 private let updateFloatingButtons = PassthroughSubject() private var bag = Set() + private var lastContentOffset: CGFloat = 0 + private var scrollDirection: ChatScrollDirection = .none init(representer: ReverseList) { self.representer = representer @@ -205,6 +213,15 @@ struct ReverseList: UIViewControllerRepresentable { } override func scrollViewDidScroll(_ scrollView: UIScrollView) { + let currentOffset = scrollView.contentOffset.y + if currentOffset > lastContentOffset { + scrollDirection = .toOldest + } else if currentOffset < lastContentOffset { + scrollDirection = .toLatest + } else { + scrollDirection = .none + } + lastContentOffset = currentOffset updateFloatingButtons.send() }