我正在使用列表中ForEach内部的NavigationLink来构建按钮的基本列表,每个按钮都导致一个单独的详细信息屏幕。
当我点击任意一个列表单元格时,它会切换到该单元格的详细信息视图,然后立即弹出主菜单屏幕。
不使用ForEach可以避免这种现象,但不是所希望的。
以下是相关代码:
struct MainMenuView: View {
...
private let menuItems: [MainMenuItem] = [
MainMenuItem(type: .type1),
MainMenuItem(type: .type2),
MainMenuItem(type: .typeN),
]
var body: some View {
List {
ForEach(menuItems) { item in
NavigationLink(destination: self.destination(item.destination)) {
MainMenuCell(menuItem: item)
}
}
}
}
// Constructs destination views for the navigation link
private func destination(_ destination: ScreenDestination) -> AnyView {
switch destination {
case .type1:
return factory.makeType1Screen()
case .type2:
return factory.makeType2Screen()
case .typeN:
return factory.makeTypeNScreen()
}
}
答案 0 :(得分:2)
如果Card card = Resources["PDFThumbnail"] as Card;
Panel panel = card?.Content as Panel;
Image image = panel?.Children.OfType<Image>().FirstOrDefault();
中有@State
,@Binding
或@ObservedObject
,则主体本身将重新生成(再次计算MainMenuView
),从而导致{ {1}}使之无效(实际上是menuItems
的更改可以做到这一点)。因此,您不得从详细信息视图中修改NavigationLink
数组id
--s。
如果每次都生成它们,请考虑设置一个常数id或将其存储在非修改部分中,例如在viewmodel中。