From ee1d9fff36aec00a87cce0f8a072494ad0686a2c Mon Sep 17 00:00:00 2001 From: Diogo Date: Tue, 15 Oct 2024 21:55:46 +0100 Subject: [PATCH] track direction --- apps/ios/Shared/Views/Chat/ReverseList.swift | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/apps/ios/Shared/Views/Chat/ReverseList.swift b/apps/ios/Shared/Views/Chat/ReverseList.swift index 163bfc13b3..106e14ffdf 100644 --- a/apps/ios/Shared/Views/Chat/ReverseList.swift +++ b/apps/ios/Shared/Views/Chat/ReverseList.swift @@ -64,7 +64,9 @@ 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 super.init(style: .plain) @@ -94,7 +96,7 @@ struct ReverseList: UIViewControllerRepresentable { ) { (tableView, indexPath, item) -> UITableViewCell? in if let section = self.dataSource.sectionIdentifier(for: indexPath.section) { let itemCount = self.getTotalItemsInItemSection(indexPath: indexPath) - if self.representer.activeSection == section, indexPath.item > itemCount - 8, itemCount > 8 { + if self.representer.activeSection == section, self.scrollDirection == .toOldest, indexPath.item > itemCount - 8, itemCount > 8 { let lastItem = self.getLastItemInItemSection(indexPath: indexPath) self.representer.loadPage(.toOldest, section, lastItem) } @@ -261,6 +263,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() }