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

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Бесконечная вертикальная прокрутка в обе стороны (динамическое добавление элементов сверху/снизу), которая не влияет на

Сообщение Anonymous »

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

Код: Выделить всё

    struct TestInfinityList: View {

@State var visibleItems: Set = []
@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)
}
}
}
}
В основном все работает нормально, за исключением небольшой, но важной детали. Когда элемент добавляется сверху, в зависимости от того, как я прокручиваю вниз, иногда он может дергаться. Это наиболее заметно ближе к концу прикрепленного клипа.
Изображение


Подробнее здесь: https://stackoverflow.com/questions/656 ... bottom-tha
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»