SwiftUI NavigationLink 隐藏箭头

SwiftUI NavigationLink Hide Arrow

有没有办法隐藏自动添加的导航 link 视图右侧的箭头?

我想使用 NavigationView -> List -> HStack -> NavigationLink_1 - NavigationLink_2

显示图像网格

导航链接有箭头,看起来很奇怪

@State var selection: Int? = nil

var body: some View {
    let navigation = NavigationLink(destination: Text("View"), tag: 1, selection: $selection) { EmptyView() }
    return 
        VStack { 
            navigation
            Text("Tap").onTapGesture { self.selection = 1 }
        }
}

它对我有用的方式:

List { 
    ForEach(elements) { element in
        ZStack {
            CustomView(element: element)
            NavigationLink(destination: DestinationView()) {
                EmptyView()
            }.buttonStyle(PlainButtonStyle())
        }
    }
}

您也可以这样做: 这对我有用,

@State var boolValue: Bool = false


                HStack {
                    Text("Your text")
                    Toggle(isOn: $boolValue){
                        Text("")
                    }
                    if boolValue {
                        NavigationLink(destination: DestinationView()) {
                            EmptyView()
                        }.frame(width: 0)
                    }
                }

它也适用于任何视图(不仅是文本)

ZStack {
    Text("Some text")
    NavigationLink(destination: Text("Hello")) { 
            EmptyView()
    }.frame(width: 0)
}

我完成了这个

NavigationLink(destination: DestinationView()) {
      EmptyView()
}
.frame(width: 0, height: 0)
.hidden()

唯一对我有帮助的是像这样将 .opacity(0) 添加到 NavigationLink:

List { 
    ForEach(elements) { element in
        ZStack {
            CustomView(element: element)
            NavigationLink(destination: DestinationView()), 
            label: {}).opacity(0)
        }
    }
}

这对我有用,只需在 ZStack

中添加一个空的 NavigationLink
List(viewModel.items, id: \.id) { item in
    ZStack {
        NavigationLink(destination: Destination()) {}
        CustomView(item: item)
    }
}

当我尝试在列表中的行内实现按钮点击时,只有这个对我有用:

ZStack {
                NavigationLink(destination: FlightBoardInformation(flight: flight), tag: FlightBoardNavigation.toFlightDetailed, selection: $navigation) {
                    EmptyView()
                }
                .frame(width: 0, height: 0)
                .hidden()
                .disabled(true)
                Button(action: {
                        self.navigation = .toFlightDetailed
                }) {
                    Text("\(self.flight.airline) \(self.flight.number)")
                }.buttonStyle(PlainButtonStyle())
            }

对我来说最好的解决方法是使用 background:

NavigationLink(...) {}
       .opacity(0)
       .background(
         HStack {
           Text("Your custom view without arrow")
         }
       ) 

或者,如果您需要@turingtested 发布的动态高度,请使用 NavigationLink 作为背景

Text("Your custom view without arrow")
        .background(NavigationLink( ... ) {}.opacity(0))

我发现的最简单的方法是将导航放在 .background 修饰符中,opacity 为零:

List {
    Text("The cell")
        .background( NavigationLink("", destination: Text("The detail view controller")).opacity(0) )
}

使用此解决方案,您不会失去单元格的动态高度功能。

虽然 .background(...).opacity(0) 有效,但在更复杂的视图中,它会在所有视图中扩展自身并与按钮等其他元素发生冲突。

如果你在 List 中需要它,对我有用的是将 NavigationLink 标记为 .disabled(true):

    Text(...)
      .background( NavigationLink(...).opacity(0).disabled(true) )

我将 navigationLinkopacity 设置为零,效果非常好

NavigationLink(
    destination: Text("Destination"),
    label: {}
).opacity(0)
List { 
    ForEach(elements) { element in
        ZStack {
            CustomView(element: element)
            NavigationLink(destination: DestinationView()) {
                EmptyView()
            }.opacity(0.0)
        }
    }
}

尽管有很多解决方案。我正在发布我的。

var body: some View {
    VStack{
        List{
            ForEach (items){item in
                switch item.onClick {
                    //For SettingsOverviewView
                case .Settings:
                    ZStack{
                        NavigationLink (destination: SettingsMenuView(item: item)){
                            EmptyView()
                        }
                        .opacity(0.0)
                        .buttonStyle(PlainButtonStyle())
                        
                        //some views that you will show as your listItem
                        HStack {
                           Text(item.name)
                              .font(.body)
                           Spacer()
                        }
                    }
                }
            }
            .listStyle(GroupedListStyle())
        }
    }
}

NavigationLink 上设置 .opacity(0) 对我来说似乎是最可靠的解决方案,因为我注意到当弄乱 .listStyle [=16= 时它可能会再次显示指标].你也不会失去突出显示的效果。

var body: some View {
    NavigationView {
        List {
            ForEach(items) { item in
                ZStack(alignment: .leading) {
                    NavigationLink(destination: EmptyView()) {
                        EmptyView()
                    }
                    .opacity(0)

                    Text(item.value)
                }
            }
        }
    }
}

尝试更改您的视图层次结构。而不是使用 List,而是使用嵌入 VStack 中的 ScrollView。使用 ForEach 遍历数据:

NavigationView -> VStack -> ScrollView -> ForEach -> NavigationLink

我在 Apple Developer 的网站上看到了这个。您可以在第 5 部分找到相关信息:https://developer.apple.com/tutorials/swiftui/composing-complex-interfaces

我的经验:

层次结构错误 bad one

好的 good one

使用 .background 修饰符。

ForEach(elements) { e in
  AnyViewYouWantToShow(e)
    .background(
      NavigationLink("", destination: DestinationView()))
        .opacity(0)
    )
}