swift - 如果 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
}
})
}
}
解决方案
推荐阅读
- angular - Angular 8 ngFor - 如何获取行 ID
- linux - Docker 中的 udevadm:命令“/bin/sh -c udevadm control --reload-rules”返回非零代码:2
- sql - 计数值并将它们分组,没有空值
- python - 不要在线图中对变量进行排序
- ios - Xcode 打字助手不显示 {} singledisplayimage 方法
- java - 为什么文件转换为 PDF 时格式会发生变化?
- magento2 - Magento 2 错误 不支持当前版本的 RDBMS。使用版本:10.1.37-MariaDB。支持的版本:MySQL-8、MySQL-5.7、MariaDB-(10.2-10.4)
- ansible - Playbook 无法创建运行到致命错误的 VM
- c# - 如何处理多个字符串值并将这些字符串值与用户输入进行比较?
- html - Iconify 图标未呈现