簡體   English   中英

SwiftUI:將新項目添加到列表時不更新 .listRowBackground

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM