【问题标题】:Menu on NavigationLink is not tapableNavigationLink 上的菜单不可点击
【发布时间】:2021-03-14 11:40:55
【问题描述】:

如何将Menu 放在NavigationLink 目标上?当我点击它时,这种方法只会打开目的地而不是菜单。

var body: some View {
    NavigationView {
        NavigationLink (
            destination: Text("Hello")
            label: { 
                ZStack(alignment: .topTrailing){
                    Rectangle()
                        .frame(width: 300, height: 100)
                    Menu {
                        Button("Order Now", action: {print("1")})
                        Button("Adjust Order", action: {print("2")})
                    } label: {
                        Label("Options", systemImage: "paperplane")
                    }
                }
            })
            .buttonStyle(PlainButtonStyle()) 
        }
    }

编辑:澄清一下:菜单位于右上角。当我点击这个菜单按钮时,应该会出现菜单。否则,当我点击视图的其余部分时,应该打开 NavigationLink 的目的地

【问题讨论】:

    标签: swiftui


    【解决方案1】:

    好吧..第三次是魅力..他们这么说!

    我让它变得比它需要的更难,但这是Menu 的一个工作示例,我自己从中学到了

        import SwiftUI
    
    struct navViewTest: View {
        var body: some View {
            NavigationView {
             
                VStack {
                  Text("Hello World")
                }.navigationBarItems(trailing:
                                        Menu {
                                            Button("Option 1", action: {doSomething() })
                                            Button("Option 2", action: {doSomething() })
                                        } label:  {Text("Menu") }
                )
            }
            }
        private func doSomething() { }
    }
    
    struct navViewTest_Previews: PreviewProvider {
        static var previews: some View {
            navViewTest()
        }
    }
    

    【讨论】:

    • 我不想使用Menu 导航到视图。我只有一些导航到特定视图的按钮,每个按钮上面都应该有一个Menu
    • @Erik 好的,请查看最新帖子,我将进一步编辑它并提供更多详细信息
    • 谢谢,但很遗憾,您的第二个解决方案不是我想要的。澄清一下:菜单位于右上角。当我点击这个菜单按钮时,应该会出现菜单。否则,当我点击视图的其余部分时,应该打开 NavigationLink 的目的地。
    • 菜单应该出现在哪里,在右上角还是你希望菜单在视图的中心?
    • 在导航链接的右上角,也就是我点击的位置
    【解决方案2】:

    我找到了一个“解决方案”。有点hacky,但到目前为止它有效。我只是将菜单包装在一个按钮中:

    Button(action: {/*do something*/}, label: {
        Menu {
            Button("Option 1", action: {print("1") })
            Button("Option 2", action: {print("2") })
        } label:  {Text("Menu") }
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 1970-01-01
      相关资源
      最近更新 更多