【问题标题】:NavigationLink in ContextMenu no longer working in iOS14 xcode12 beta3?ContextMenu 中的 NavigationLink 不再在 iOS14 xcode12 beta3 中工作?
【发布时间】:2020-08-04 11:03:39
【问题描述】:

想知道其他人是否有此问题,以及是否找到了解决方法。这在 iOS 13 中运行良好,但在 iOS 14 中似乎坏了。 我只是想从 .contextMenu 触发 NavigationLink 到另一个视图。

我的代码如下。

import SwiftUI

struct ContentView: View {
    var body: some View {
        
        NavigationView {
            VStack {
                HStack {
                    Text("I am a text in a HStack ")
                }
                HStack {
                    NavigationLink(destination: TestView()) {
                        VStack {
                            Image(systemName:"gauge")
                                .font(.system(size: 31))
                        }
                    }
                }
            }
            .contextMenu {
                NavigationLink(destination: TestView()) {
                    Text("Navigate to TestView")
                    Image(systemName: "pencil")
                }
            }
        }
    }
}

Destination TestView() 只是一个样板的“Hello World”视图。

如果我单击的不是堆栈中关联的图标,则会完美触发导航。但是上下文菜单中的相同链接没有。 当我在上下文菜单中选择它时,什么也没有发生。即我可以选择菜单项,但它所做的只是关闭上下文菜单并且我停留在同一个视图上。

还有人发现这个吗?解决了吗? 谢谢

【问题讨论】:

  • 我认为这是一个错误。我不希望 NavigationLink 会在 NavigationView 之外工作,但 contextMenu 确实是一个不同的视图层次结构。在 NavigationView 中使用 NavigationLink(例如在后台不可见)并从 contextMenu 以编程方式激活。类似于下一个方法stackoverflow.com/a/61181490/12299030

标签: swiftui contextmenu swiftui-navigationlink ios14 xcode12


【解决方案1】:

这是一个可能的方法的演示。使用 Xcode 12b3 / iOS 14 测试(也适用于 SwiftUI 1.0)

struct ContentView: View {
    @State private var showLink = false

    var body: some View {

        NavigationView {
            VStack {
                HStack {
                    Text("I am a text in a HStack ")
                }
                HStack {
                    NavigationLink(destination: Text("TestView")) {
                        VStack {
                            Image(systemName:"gauge")
                                .font(.system(size: 31))
                        }
                    }
                }
            }
            .background(NavigationLink("", destination: Text("TestView"), isActive: $showLink))
            .contextMenu {
                Button(action: { self.showLink = true }) {
                    HStack {
                        Text("Navigate to TestView")
                        Image(systemName: "pencil")
                    }
                }
            }
        }
    }
}

【讨论】:

  • 非常感谢您的回复和建议的方法 - 它也适用于 Xcode 12b4。也就是说,当您有许多 contextMenu 项目时,它可能会变得混乱。很遗憾,在 iOS13 中运行良好的东西在 iOS 14 中似乎没有。谢谢
  • 在许多菜单项的情况下,您可以类似地使用一个背景 NavigationLink,但使用标签和选择进行初始化,因此每个菜单项都会激活选择,它可以是枚举,甚至可以根据该枚举更改目标...所以...生活还不错:)
猜你喜欢
  • 1970-01-01
  • 2021-01-19
  • 2021-01-08
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多