【发布时间】:2021-02-16 19:49:58
【问题描述】:
向数组添加或从数组中删除时,除非用户与ScrollView 交互,否则视图不会更新。
Model 是一个ObservableObject,在应用生命周期的早期被声明为StateObject,然后作为EnvironmentObject 传递。
数据只是一个带有对象数组的自定义Profile对象,当添加到store.profile!.tasks.append()或从视图中删除时,除非用户滚动ScrollView,否则不会更新;我的意思是字面意思是 1 个像素。
我尝试过的
- 将 ForEach 包装在 LazyVStack 或 VStack 中
- 将 NavigationLink 包装在 VStack 中
- 确保尺寸为全高,以防需要重新计算
代码
class Profile: Identifiable, Codable, Equatable
var tasks: [Task]
}
struct Task: Identifiable, Codable, Equatable {
var createdBy: String
var title: String
var date: Date
}
class Store : ObservableObject {
@Published var profile: Profile?
}
struct ListView: View {
@EnvironmentObject var store: Store
var body: some View {
GeometryReader { geometry in
ZStack(alignment: .bottomTrailing) {
ScrollView(.vertical, showsIndicators: false){
ForEach(store.profile!.tasks.filter({ return $0.createdBy == store.profile!.uid}).indices, id: \.self) { index in
NavigationLink(destination: DetailView().environmentObject(store)) {
TasksRow().id(UUID())
}
}
}
.frame(maxWidth: geometry.size.width, alignment: .center)
.frame(maxHeight: geometry.size.height)
.background(Color.gray)
}
}
}
【问题讨论】: