In SwiftUI, where are the control events, i.e. scrollViewDidScroll to detect the bottom of list data

后端 未结 5 1813
南笙
南笙 2020-12-09 18:57

In SwiftUI, does anyone know where are the control events such as scrollViewDidScroll to detect when a user reaches the bottom of a list causing an event to retrieve additio

5条回答
  •  青春惊慌失措
    2020-12-09 19:49

    Plenty of features are missing from SwiftUI - it doesn't seem to be possible at the moment.

    But here's a workaround.

    TL;DR skip directly at the bottom of the answer

    An interesting finding whilst doing some comparisons between ScrollView and List:

    struct ContentView: View {
    
        var body: some View {
    
            ScrollView {
                ForEach(1...100) { item in
                    Text("\(item)")
                }
                Rectangle()
                    .onAppear { print("Reached end of scroll view")  }
            }
        }
    
    }
    

    I appended a Rectangle at the end of 100 Text items inside a ScrollView, with a print in onDidAppear.

    It fired when the ScrollView appeared, even if it showed the first 20 items.

    All views inside a Scrollview are rendered immediately, even if they are offscreen.

    I tried the same with List, and the behaviour is different.

    struct ContentView: View {
    
        var body: some View {
    
            List {
                ForEach(1...100) { item in
                    Text("\(item)")
                }
                Rectangle()
                    .onAppear { print("Reached end of scroll view")  }
            }
        }
    
    }
    

    The print gets executed only when the bottom of the List is reached!

    So this is a temporary solution, until SwiftUI API gets better.

    Use a List and place a "fake" view at the end of it, and put fetching logic inside onAppear { }

提交回复
热议问题