首页 > 解决方案 > 如果 ContentView 更新,每次都会重新创建 FullScreenCover 中的 ChildView

问题描述

我有一个与下一个行为有关的问题。

我有ContentView一个视图列表,其中传递了相应的视图模型。用户可以点击某个视图。此时将根据传递的类型显示全屏模式对话框。没关系。有时我的视图模型正在更新,整个模型ContentView将被重新加载。问题是:fullScreenCover 被调用并被ChildEventView重新创建。如何防止重新创建ChildEventView

struct ContentView: View {

    @State private var fullScreenType: FullScreenType?

    // some stuff

    var body: some View {
        ScrollView {
            LazyVStack {
                ForEach(eventListViewModel.cardStates.indices, id: \.self) { index in
                    let eventVM = eventListViewModel.eventVMs[index]
                    EventCardView(eventViewModel: eventVM, eventId: $selectedEvent.eventId) {
                        self.fullScreenType = .type1
                    }
                    // some other views
                }
            }
        }  
        .fullScreenCover(item: $fullScreenType, onDismiss: {
            self.fullScreenType = nil
        }, content: { fullScreenType in
            switch fullScreenType {
                case .type1:
                return ChildEventView(selectedEvent.eventId).eraseToAnyView()
                // some other cases
            } 
        })
    }
}

标签: swiftswiftuifullscreenswiftui-list

解决方案


推荐阅读