[英]SwiftUI: .listRowBackground is not updated when new item added to the List
我試圖找出在將新項目添加到列表時未更新.listRowBackground
的原因。 這是我的代碼示例:
@main
struct BGtestApp: App {
@ObservedObject var viewModel = ViewModel()
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(viewModel)
}
}
}
struct ContentView: View {
@EnvironmentObject var vm: ViewModel
var body: some View {
NavigationView {
List {
ForEach(vm.items, id: \.self) { item in
NavigationLink {
DetailView().environmentObject(vm)
} label: {
Text(item)
}
.listRowBackground(Color.yellow)
}
}
}
}
}
struct DetailView: View {
@EnvironmentObject var vm: ViewModel
var body: some View {
Button("Add new") {
vm.items.append("Ananas")
}
}
}
TIA 為您提供幫助!
當您回到列表時,您可以強制刷新列表。 您可以使用.id()
為您的列表標記一個 id。 這是我的解決方案:
struct ContentView: View {
@EnvironmentObject var vm: ViewModel
@State private var viewID = UUID()
var body: some View {
NavigationView {
List {
ForEach(vm.items, id: \.self) { item in
NavigationLink {
DetailView()
.environmentObject(vm)
} label: {
Text(item)
}
}
.listRowBackground(Color.yellow)
}
.id(viewID)
.onAppear {
viewID = UUID()
}
}
}
}
希望對你有幫助。
我發現的解決方案並不理想,但應該可以。 我所做的是將項目設為@State
變量:
struct ContentView: View {
@EnvironmentObject var vm: ViewModel
@State var items: [String] = []
var body: some View {
NavigationView {
VStack {
List {
ForEach(items, id: \.self) { item in
NavigationLink {
DetailView().environmentObject(vm)
} label: {
RowView(item: item)
}
.listRowBackground(Color.yellow)
}
}
.onAppear {
self.items = vm.items
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.