Anu*_*ugh 7 xcode ios swift swiftui
我正在尝试使用 ForEach 填充一组视图。我已经使用 Alamofire 来获取数据并设置 @State 属性来触发更新。不幸的是,更新仅在我切换屏幕(使用 TabBar)或转到主屏幕并重新打开应用程序时显示。
以下是我使用过的代码片段:
@State var posts : [Post]
var body: some View {
ScrollView{
VStack(alignment: .leading, spacing: 0){
ForEach(posts, id: \.id) { preview in
PreviewDetailView(preview: preview).background(Color(.white).cornerRadius(30))
}
}
}.onAppear(perform: {fetchPosts()})
}
Run Code Online (Sandbox Code Playgroud)
显然,PreviewDetailView(我在其中显示 API 响应数据)被触发,但视图没有更新。
原因是当你使用stack或ForEach内ScrollView,你必须SETFRAME限制初始化像下面的视图设置。
ScrollView{
VStack(alignment: .leading, spacing: 0){
ForEach(self.posts, id: \.id) { preview in
PreviewDetailView(preview: preview)
.background(Color(.red).cornerRadius(30))
}.frame(maxWidth: .infinity) // Here
}
}.onAppear{
self.fetchPosts()
}
Run Code Online (Sandbox Code Playgroud)
我可以猜测你posts最初是空的数组...这是一个(不知道功能或错误)带有空容器的独立 ForEach 初始化。顺便说一句,在这种情况下列出一切都可以。@State、 、 、@ObservedObject、onAppear和自定义出版商都不会影响或提供帮助。在 ForEach 中启动时只需清空容器。
解决方法:在容器中使用一些初始存根 Post,可以仅在视图构建器中进行有条件的检查,并且不会显示
或者使用List代替ScrollView/VStack/ForEach。
更新:我的错...当我写下这个最新短语时,我有一个想法,我总是以这样的组合使用它ScrollView/VStack/ForEach...简而言之,问题出在 ScrollView 中。
| 归档时间: |
|
| 查看次数: |
2199 次 |
| 最近记录: |