显示视图时隐藏 NavigationLink 上的 V 形/箭头,SwiftUI

Har*_*ryW 10 xcode ios swift swiftui

我正在尝试删除屏幕右侧显示的带有包含视图的 navigationLink 的 V 形符号。这是我的代码如下:

        NavigationView {
        List {
             NavigationLink(destination: DynamicList()) {
                  ResultCard()
             }
      ...
      }
Run Code Online (Sandbox Code Playgroud)

Stack Overflow 上的其他答案建议使用如下内容:

NavigationLink(...)
   .opacity(0)
Run Code Online (Sandbox Code Playgroud)

但是,这在我的情况下不起作用,因为将不透明度降低到 0 也会删除我尝试显示的视图。“.hidden”也是如此。我到处搜索过,我能找到的唯一可行的解​​决方案是改变填充,以便将 V 形“推”到侧面,但这是一个糟糕的解决方案,因为“ResultCard”视图会显得不稳定/关闭-以不同的显示尺寸为中心。

也许无法删除 V 形 - 如果是这种情况,是否有其他方法可以允许用户点击“ResultCard”视图并进入新页面,而不是通过导航关联?

我正在用头撞墙,所以非常感谢任何想法。

jn_*_*pdx 15

您可以.overlay在标签视图上使用带有 set 的 aNavigationLink作为EmptyView()其标签:


struct ContentView : View {
    var body: some View {
        NavigationView {
            List {
                NavigationLink("Link 1", destination: Text("Hi"))
                Text("Test")
                    .overlay(NavigationLink(destination: Text("Test"), label: {
                        EmptyView()
                    }))
            }
        }
    }
}

Run Code Online (Sandbox Code Playgroud)

叠加导航示例

更新:另一个解决方案,似乎适用于除文本之外的其他类型的视图:

struct ContentView : View {
    @State private var linkActive = false
    
    var body: some View {
        NavigationView {
            List {
                NavigationLink("Link 1", destination: Text("Hi"))
                Button(action: { linkActive = true }) {
                    Image(systemName: "pencil")
                }.overlay(VStack {
                    if linkActive {
                        NavigationLink(destination: Text("Test"), isActive: $linkActive) {
                            EmptyView()
                        }.opacity(0)
                    }
                })
            }
        }
    }
}

Run Code Online (Sandbox Code Playgroud)

  • 我需要将 `.hidden()` 添加到 `NavigationLink` (对于 iOS 14),否则 V 形图标仍然会出现。我的“.overlay”正在应用于“HStack”,因此我可以在右侧替换我自己的图标。这一切都非常棘手,我希望苹果能够解决这个问题。 (2认同)