SwiftUI可观测对象不';第一次尝试时无法更新UI 问题

SwiftUI可观测对象不';第一次尝试时无法更新UI 问题,swiftui,observableobject,Swiftui,Observableobject,@observeObjectViewModel仅在关闭并重新打开视图后更新UI。一旦发生此更新,@observeObject中@Published变量中的每个后续更改都会触发自动更新 上下文 我的项目中有一个名为“堆栈”的模型 struct Stack: Identifiable, Equatable { var id = UUID() var title: String var isPinned = false } 我有一个视图(NavigationMenuView)

@observeObject
ViewModel仅在关闭并重新打开视图后更新UI。一旦发生此更新,
@observeObject
@Published
变量中的每个后续更改都会触发自动更新

上下文 我的项目中有一个名为“堆栈”的模型

struct Stack: Identifiable, Equatable {
    var id = UUID()
    var title: String
    var isPinned = false
}
我有一个视图(NavigationMenuView),它在滚动视图中显示所有堆栈 导入快捷键

struct NavigationMenuView: View {

    @ObservedObject var viewModel = NavigationMenuViewModel()

    @EnvironmentObject var environmentObjects: EnvironmentObjects

    var body: some View {
        ZStack{
            NavigationView {
                VStack(alignment: .leading){
                    ScrollView {
                        ForEach(viewModel.stacks){ stack in
                            StackRow(
                                stack: stack,
                                lftButtonAction: {
                                    self.viewModel.toggleIsPinned(for: stack)
                                },
                                rhtButtonAction: {
                                    self.viewModel.deleteStack(stack: stack)
                                }
                            )
                        }
                    }

                }
                .navigationBarTitle(Text("Home"))
                .navigationBarItems(trailing: addNewStackButton)
                .background(Color(UIColor.systemGray6).edgesIgnoringSafeArea(.all))
            }.zIndex(1)

            if environmentObjects.newStackViewIsShown {

                VStack{
                    Spacer()
                    NewStackView(viewModel: NewStackViewModel())
                }
                .onDisappear{
                    self.viewModel.fetchStacks()
                }
                .zIndex(2)
            }
        }
        .onAppear{
            self.viewModel.fetchStacks()
        }
    }
}
此视图的视图模型有一个
@已发布的var stacks=[Stack]()
数组,该数组通过
fetchStacks()
获取更新

NavigationMenuView有一个子视图(NewStackView),它使用以下按钮创建一个新的“堆栈”(使用ViewModel):

            Button(action: {
                if !self.isAddButtonDisabled{
                    self.viewModel.addNewStack(title: self.title)
                    self.environmentObjects.newStackViewIsShown = false
                }
            }) {
                Text("Add")
                    .padding(.vertical, 16.0)
                    .frame(minWidth: 0, maxWidth: .infinity)
                    .foregroundColor(Color(UIColor.systemBackground))
                    .background(
                        RoundedRectangle(cornerRadius: 10, style: .continuous)
                        .foregroundColor(addButtonColor)
                    )
            }
            .disabled(isAddButtonDisabled)
我自己的进步 我发现只有当
NewStackView
显示为NavigationMenuView的子视图时,才会出现这种情况。当使用
.sheet()
将其显示为模式视图时,NewStackView会立即更新