Я сталкивался с этим каждый раз, когда реализовал отложенный стек внутри ScrollView:
- Добавьте LazyHStack в горизонтальный ScrollView или LazyVStack в вертикальный ScrollView
- Добавьте достаточно контента, чтобы размер содержимого представления прокрутки превышает его границы.
Ожидаемое поведение: оно ведет себя так, как ожидалось, когда прокрутка остается под вашим пальцем.
Наблюдаемое поведение: он заикается и подпрыгивает.
Сценарий 2 – быстрая прокрутка к краю, так что приходится подпрыгивать
Ожидаемое поведение: он плавно подпрыгивает
Наблюдаемое поведение: он останавливается и трясется, когда достигает края, но не не отскакивает
Моя теория
Моя теория заключается в том, что из-за использования ленивого стека, когда представление выходит за пределы экрана, оно удаляется с экрана. просматривать иерархию, создавая заикание.
Мне интересно, сталкивался ли кто-нибудь еще с этим? Это ошибка в SwiftUI? Я надежно воспроизводил это в течение нескольких месяцев в разных проектах и в конечном итоге отказался от использования ленивых стеков, чего мне хотелось бы.
Пример кода
Код: Выделить всё
ScrollView {
LazyVStack {
ForEach(viewModel.items) { items in
SomeView(viewModel: .init(context: viewModel.context, item: item))
}
}
** Обновлено 10 июля, 2021 г. **
Это все еще происходит в бета-версии iOS 15 версии 13.0 (13A5155e).
Обратите внимание на видео ниже. поведение полосы прокрутки и заикание, когда мы доходим до конца:
** Обновлено 19 июля 2021 г. **
Я вырезал все, что на мой взгляд, и собрал обратно одно за другим — LazyVStack начинает заикаться, как только я помещаю VStack/HStack/ZStack вокруг простого элемента Text.
Если я добавлю фиксированный размер (по горизонтали: false, по вертикали: true) к элементу Text кажется, перестал заикаться. Как только я добавляю UIViewRepresentable переменной высоты, он снова начинает заикаться.
Похоже, что в LazyStack каждый дочерний элемент должен иметь какой-то фиксированный размер или чистое представление SwiftUI для работы.
Я продолжу копаться. Нужно... решить...
** Обновлено 24 февраля 2024 г. **
После долгого перерыва я вернулся к SwiftUI и вижу, что LazyVStack больше не зависает, когда он находится в ScrollView.
Я не уверен, в какой версии это исправлено, но ура!
XCode: 15.2
iOS: 17.4
Подробнее здесь: https://stackoverflow.com/questions/665 ... uttering-a