SwiftUI ScrollView имеет странное поведение при сбросе содержимогоIOS

Программируем под IOS
Ответить
Anonymous
 SwiftUI ScrollView имеет странное поведение при сбросе содержимого

Сообщение Anonymous »

Я работаю со SwiftUI и пытаюсь создать ScrollView, который можно фильтровать (по сути, это список).
Стек выглядит так:

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

class ViewModel: ObservableObject {
@Published
var isRefreshing = false
var components: [Int] = Array(0...100)

func refresh() {
isRefreshing = true
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
self.isRefreshing = false
}
}
}

struct ContentView: View {
@StateObject
private var viewModel: ViewModel

init() {
_viewModel = StateObject(wrappedValue: ViewModel())
}

var body: some View {
ScrollView(showsIndicators: false) {
LazyVStack(spacing: .zero, pinnedViews: [.sectionHeaders]) {
Section {
if viewModel.isRefreshing {
loadingView
} else {
ForEach(viewModel.components, id: \.hashValue) { _ in
Rectangle()
.frame(height: 700)
.foregroundStyle(Color.blue)
.padding(.bottom, 24)
}
}
} header: {
filterBar
.onTapGesture {
viewModel.refresh()
}
}
}
}
}

var filterBar: some View {
Rectangle()
.foregroundStyle(Color.yellow)
.frame(height: 100)
}

var loadingView: some View {
Rectangle()
.foregroundStyle(Color.green)
.frame(height: 300)
}
}
В резюме у нас есть два возможных состояния: загрузка или содержимое. При применении фильтров мы сначала меняем статус на загрузку. Это заменяет ForEach статическим LoadingView. Затем, после завершения сетевого запроса, мы снова заменяем LoadingView на ForEach.
В большинстве случаев это работает нормально. Но в некоторых случаях LoadingView не отображается. Вместо этого весь вид пуст (я вижу только фон). Иногда он исчезает после обновления контента, но иногда он зависает на этом пустом контенте, пока пользователь не начнет прокручивать снова.
Запись показывает проблему. Немного прокручиваем представление, а затем нажимаем на фильтр. Вместо отображения загрузки он просто становится пустым. Иногда это работает нормально.
Изображение
Пример выше был максимально упрощен. Тем не менее проблема сохраняется. Попытка прокрутить обратно вверх не решила проблему, поскольку пустой фон продолжает появляться время от времени.
Если посмотреть на визуальный отладчик, то обнаружится, что элемент управления ScrollView находится там. правильная ширина и высота. Но контент просто не в окне просмотра.

Подробнее здесь: https://stackoverflow.com/questions/785 ... he-content
Ответить

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

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

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

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

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