Вопросы

Бесконечная вертикальная прокрутка в обоих направлениях (добавление элементов динамически вверху / внизу), которая не мешает положению прокрутки при добавлении в начало списка

Мне нужна вертикальная прокрутка, которая бесконечна в обоих направлениях: прокрутка вверх или вниз вниз приводит к динамическому добавлению большего количества элементов. Почти вся помощь, с которой я сталкивался, касается только бесконечности нижней стороны. Я наткнулся на этот соответствующий ответ, но это не то, что я специально ищу (он добавляет элементы автоматически в зависимости от продолжительности , и требует взаимодействия с кнопками направления, чтобы указать способ прокрутки). Этот менее актуальный ответ, однако, был довольно полезный. Основываясь на сделанном там предложении, я понял, что могу вести учет элементов, видимых в любое время, и, если они окажутся позициями X сверху / снизу, вставить элемент в начальный / конечный индекс в списке.

Еще одно замечание: я начинаю список с середины, поэтому нет необходимости добавлять что-либо в любом случае, если вы не переместились на 50% вверх / вниз.

Читать:
Как перейти на более раннюю версию или установить более старую версию Cocoapods

Чтобы было ясно, это для экрана календаря, который я хочу, чтобы пользователь мог свободно прокручивать в любое время.

    struct TestInfinityList: View {
    
    @State var visibleItems: Set<Int> = []
    @State var items: [Int] = Array(0...20)
    
    var body: some View {
        ScrollViewReader { value in
        
            List(items, id: \.self) { item in
                VStack {
                    Text("Item \(item)")
                }.id(item)
                .onAppear {
                    self.visibleItems.insert(item)
                    
                    /// if this is the second item on the list, then time to add with a short delay
                    /// another item at the top
                    if items[1] == item {
                        DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) {
                            withAnimation(.easeIn) {
                                items.insert(items.first! - 1, at: 0)
                            }
                        }
                    }
                }
                .onDisappear {
                    self.visibleItems.remove(item)
                }
                .frame(height: 300)
            }
            .onAppear {
                value.scrollTo(10, anchor: .top)
            }
        }
    }
}

В основном это работает нормально, за исключением небольшой, но важной детали. Когда элемент добавляется сверху, в зависимости от того, как я прокручиваю вниз, иногда он может быть скачкообразным. Это наиболее заметно ближе к концу прикрепленного зажима.

Похожие записи

Перенаправление портов отладки для удаленного использования записной книжки Jupyter

admin

GCP Pub / sub: использование горутин для запуска нескольких подписчиков в одном приложении

admin

Как сохранить ответ JSON от входа пользователя в Core Data для отслеживания состояния пользователя в Swift?

admin

как заархивировать содержимое папки с помощью аргумента командной строки?

admin

Проблема с интервалом между отступами в файле Prettier vscode json

admin

phpMyAdmin показывает 404 Not Found (Ubuntu 18.04 Nginx)

admin