Цель
Получить данные для отображения в scrollView
ожидаемый результат
Фактический результат
альтернатива
использовать List
, но он не гибкий (не может удалить разделители, не может иметь несколько столбцов)
Код
struct Object: Identifiable {
var id: String
}
struct Test: View {
@State var array = [Object]()
var body: some View {
// return VStack { // uncomment this to see that it works perfectly fine
return ScrollView(.vertical) {
ForEach(array) { o in
Text(o.id)
}
}
.onAppear(perform: {
self.array = [Object(id: "1"),Object(id: "2"),Object(id: "3"),Object(id: "4"),Object(id: "5")]
})
}
}
return
print
заявление раньше, следовательноreturn
Ответы:
Не очень удачный способ обойти эту проблему - заключить ScrollView в оператор IF, который проверяет, является ли массив пустым
источник
Ожидаемое поведение происходит,
Xcode 11.1
но не включаетсяXcode 11.2.1
Я добавил
frame
модификатор,ScrollView
который делаетScrollView
появлениеисточник
Я обнаружил, что это работает (Xcode 11.2), как и ожидалось, если состояние инициализируется некоторым значением, а не пустым массивом. В этом случае обновление работает корректно и исходное состояние не действует.
источник
onAppear
, поэтому инициализация scrollView с фиктивными данными может быть проблематичнойОдин хакерский обходной путь, который я нашел, состоит в добавлении «невидимого»
Rectangle
внутри scrollView сwidth
установленным значением, превышающим ширину данных вscrollView
источник