在菜单中使用 NavigationLink (SwiftUI)

len*_*nny 5 swift swiftui swiftui-navigationlink

您可以在 swiftUI 中将aNavigationLink用作 aMenu的项目吗?

它似乎什么都不做:

Menu {
   NavigationLink(destination: Text("test1")) {
       Text("item1")
   }
   NavigationLink(destination: Text("test2")) {
       Text("item2")
   }
} label: {
   Text("open menu")
}
Run Code Online (Sandbox Code Playgroud)

如果它不能像上面尝试的那样工作,是否有其他方法可以实现预期的结果?

Asp*_*eri 15

init(destination:isActive:label:) 自 iOS 16 起已弃用

'init(destination:isActive:label:)' 在 iOS 16.0 中已弃用:在 NavigationStack 或 NavigationSplitView 中使用 NavigationLink(value:label:)

NavigationLink应该在NavigationView层次结构内部。这Menu是在导航视图之外,因此将按钮放在菜单内,以激活导航视图内放置的导航链接,例如。隐藏在背景中。

这是可能方法的演示(使用 Xcode 12.1 / iOS 14.1 测试)

演示

struct DemoNavigateFromMenu: View {
    @State private var navigateTo = ""
    @State private var isActive = false
    var body: some View {
        NavigationView {
            Menu {
                Button("item1") {
                    self.navigateTo = "test1"
                    self.isActive = true
                }
                Button("item2") {
                    self.navigateTo = "test2"
                    self.isActive = true
                }
            } label: {
                Text("open menu")
            }
            .background(
                NavigationLink(destination: Text(self.navigateTo), isActive: $isActive) {
                    EmptyView()
                })
        }
    }
}
Run Code Online (Sandbox Code Playgroud)