From d297e5057567582c2b9a48bcccad7111859e85e2 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Sun, 13 Apr 2025 17:24:21 +0800 Subject: [PATCH] fix --- dimensionhub/Views/Index/IndexMainView.swift | 8 +------- dimensionhub/Views/Index/IndexModel.swift | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/dimensionhub/Views/Index/IndexMainView.swift b/dimensionhub/Views/Index/IndexMainView.swift index 5b20f7e..2baf117 100644 --- a/dimensionhub/Views/Index/IndexMainView.swift +++ b/dimensionhub/Views/Index/IndexMainView.swift @@ -73,7 +73,6 @@ struct IndexMainView: View { } ProgressView() - .id(UUID()) .background(GeometryReader { geometry in let minY = geometry.frame(in: .global).minY Color.clear.preference(key: FooterOffsetPreferenceKey.self, value: Int(minY)) @@ -142,12 +141,7 @@ struct IndexMainView: View { await self.indexModel.loadData(userId: self.userId) } .onPreferenceChange(DramaGroupElementPreferenceKey.self) { frames in - let visibleFrames = frames.filter { $0.value >= 0} - if let minFrame = visibleFrames.min(by: { $0.value <= $1.value}) { - DispatchQueue.main.async { - indexModel.setFixedDrameGroup(groupId: minFrame.key) - } - } + indexModel.visiblePublisher.send(frames) } } diff --git a/dimensionhub/Views/Index/IndexModel.swift b/dimensionhub/Views/Index/IndexModel.swift index 28d6ba8..d4f6c3e 100644 --- a/dimensionhub/Views/Index/IndexModel.swift +++ b/dimensionhub/Views/Index/IndexModel.swift @@ -78,6 +78,9 @@ final class IndexModel { @ObservationIgnored var loadMorePublisher = PassthroughSubject<(String, Int), Never>() + @ObservationIgnored + var visiblePublisher = PassthroughSubject<[String: CGFloat], Never>() + @ObservationIgnored private var bag = Set() @@ -101,6 +104,19 @@ final class IndexModel { } } .store(in: &bag) + + self.visiblePublisher + .debounce(for: 0.05, scheduler: RunLoop.main) + .dropFirst() + .sink { frames in + let visibleFrames = frames.filter { $0.value >= 0} + if let minFrame = visibleFrames.min(by: { $0.value <= $1.value}) { + DispatchQueue.main.async { + self.setFixedDrameGroup(groupId: minFrame.key) + } + } + } + .store(in: &bag) } func loadData(userId: String) async {