繁体   English   中英

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

[英]Hide chevron/arrow on NavigationLink when displaying a view, SwiftUI

我正在尝试使用包含视图的 navigationLink 删除出现在屏幕右侧的人字形。 这是我的代码如下:

        NavigationView {
        List {
             NavigationLink(destination: DynamicList()) {
                  ResultCard()
             }
      ...
      }

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

NavigationLink(...)
   .opacity(0)

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

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

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

您可以在 label 视图上使用.overlay ,并将NavigationLinkEmptyView()设置为其 label:


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

叠加导航示例

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

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)
                    }
                })
            }
        }
    }
}

这是一个替代 using.background() 和 selection: 参数,其行为类似于电话/收藏夹视图:

    @State private var selectedID: String?
    
    var body: some View {
        NavigationView {
            List {
                ForEach(items) { item in
                    HStack {
                        Text(item.name)
                        Spacer()
                        Button(action: { selectedID = item.id }) {
                            Image(systemName: "info.circle")
                        }
                        .background {                            
                            NavigationLink("", tag: item.id, selection: $selectedID) {
                                Detail()
                            }
                            .hidden()
                        }
                    }
                }
            }
        }
    }

jnpdx 的更新解决方案几乎对我有用,但它把 animation 弄乱到下一个视图。 这对我有用(实际上比 jnpdx 的答案更简单):

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

这对我有用,基于@wristbands 的解决方案并使用 Xcode 14.1 定位 iOS 16:

struct ContentView : View {
    var body: some View {
        NavigationStack {
            List {
                Text("View")    // your view here
                .overlay {
                    NavigationLink(destination: { Text("Test") }, 
                                   label: { EmptyView() })
                        .opacity(0)
                }
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM