#pagination #uiscrollview #swiftui #geometryreader
#разбивка на страницы #uiscrollview #swiftui #geometryreader
Вопрос:
итак, я в некоторой степени реализовал разбиение на страницы, однако есть ошибка. Кажется, что я могу выполнить только self.searchViewModel.loadMoreData()
один раз, и это только тогда, когда представление было представлено.
Это мой полный код:
@State var time = Timer.publish(every: 0.1, on: .main, in: .tracking).autoconnect()
var body: some View {
ZStack {
Color(SYSTEM_BACKGROUND_COLOUR)
.edgesIgnoringSafeArea(.all)
GeometryReader { geometry in
VStack(alignment: .center) {
ScrollView(.vertical, showsIndicators: false) {
VStack {
VStack(alignment: .leading) {
if !self.searchViewModel.isLoading {
VStack {
ForEach(self.searchViewModel.post, id: .postID) { post in
VStack {
HeaderCell(post: post)
FooterCell(post: post)
.onAppear {
self.time = Timer.publish(every: 0.1, on: .main, in: .tracking).autoconnect()
}
.onReceive( self.searchViewModel.time) { (_) in
if geometry.frame(in: .global).maxY < UIScreen.main.bounds.height - 80{
print("Getting data")
self.searchViewModel.loadMoreData()
self.time.upstream.connect().cancel()
}
}
}
}
}
}
}
}
}
}
}
}.navigationBarTitle(Text("Results"), displayMode: .inline)
}
Я действительно верю, что это потому, что time
не меняет его состояние. Поскольку консоль печатает «Получение данных» только один раз. Как только я прокручиваю до конца своего представления, после того, как собрана и представлена следующая группа данных, ничего не происходит. Я пытался разобраться с этим в течение нескольких часов.
Я читал о том, как @Binding
намного лучше использовать, но я получаю постоянные ошибки всякий раз, когда пытаюсь это реализовать.
По сути, я просто хочу определить, когда пользователь прокрутил весь путь до конца моего ScrollView
, чтобы я мог вызвать функцию для получения следующего пакета информации. Я перепробовал почти все возможные решения, но безуспешно. Я переместил и изменил оба onAppear
amp; onReceived
метода везде в пределах моего представления.
Любая помощь была бы очень признательна.
Комментарии:
1. Этот подход не сработает, потому что ScrollView загружает / отображает весь предоставленный контент сразу во время создания. Вот почему вы видите печать только один раз.
2. @Asperi итак, был бы мой лучший вариант? Добавить кнопку с надписью
Load More
?3. Что-то вроде donnywals.com /…