[英]SwiftUI ForEach views not updating for the first time
我正在嘗試使用 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()})
}
顯然, PreviewDetailView
(我在其中顯示 API 響應數據)被觸發但視圖沒有更新。
原因是當您在ScrollView
中使用stack
或ForEach
時,您必須設置 Frame 限制來初始化視圖設置,如下所示。
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()
}
我認為,您必須檢查“帖子”對象是否為空;
if !self.posts.isEmpty {
ForEach(self.posts, id: \.id) { preview in
PreviewDetailView(preview: preview)
.background(Color(.red).cornerRadius(30))
}
}
我猜你的posts
最初是空數組......這是一個(不知道功能或錯誤)獨立 ForEach 初始化與空容器。 順便說一句,在這種情況下使用 List 一切正常。 @State
、 @ObservedObject
、 onAppear
和自定義發布者都不會影響或幫助這里。 在 ForEach 中啟動時只是清空容器。
解決方法:在容器中使用一些初始存根 Post,它可以在視圖構建器中有條件地檢查而不顯示
或者使用 List 而不是 ScrollView/VStack/ForEach。
更新:我的錯......當我寫這個最新的短語時,我有一個想法,我總是在這樣的組合中使用它ScrollView/VStack/ForEach
......簡而言之,問題出在 ScrollView 中。
我的解決方案是像這樣為 VStack 設置一個 minHeight :
ScrollView{
VStack(alignment: .leading, spacing: 0){
ForEach(self.posts, id: \.id) { preview in
PreviewDetailView(preview: preview)
.background(Color(.red).cornerRadius(30))
}
}.frame(minHeight: <some_reasonable_Float_value, minWidth: <same_here>)
}
就像提到的一些海報一樣, ScrollView
並不知道要呈現的項目的尺寸是多少,因此它會自行折疊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.