This commit is contained in:
anlicheng 2025-04-13 17:24:21 +08:00
parent f1790156f9
commit d297e50575
2 changed files with 17 additions and 7 deletions

View File

@ -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)
}
}

View File

@ -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<AnyCancellable>()
@ -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 {