如何删除 Navigation Link > SwiftUI 中的符号?

How to delete Navigation Link > symbol in SwiftUI?

如何在 SwiftUI 中删除导航 Link > 符号?


导航码

NavigationView{
    List{
        ForEach(messages) { item in
            NavigationLink(destination: MessageDetailView()){
                ChatRowView(chat: item)
                .padding(.vertical,3)
            }
           
        }
     
  
    }

在这种情况下你不应该使用 List:


import SwiftUI

struct ContentView: View {
    
    var body: some View {

        NavigationView{
            
            VStack {
                
                ForEach(0..<10) { item in
                    
                    NavigationLink(destination: Text("some text here!")){
                        
                        HStack { Text("Link " + item.description); Spacer() }.padding(.horizontal)
                        
                    }
                    
                    Divider()
                    
                }
                
                Spacer()
                
            }
            .navigationTitle("Hello World!")
            
        }
    }
}

link 的 Chevron 图像由 List 注入,用于自动检测 NavigationLink。这是 List.

的默认行为

可能的解决方案是将 List 中的 NavigationLink 替换为 Button 并以编程方式激活 NavigationLink

这是一个方法演示。使用 Xcode 12.4 / iOS 14.4

测试

struct Message: Identifiable, Hashable {
    let id: String
}

struct ContentView: View {
    let messages = [Message(id: "1"), Message(id: "2"), Message(id: "3")]
    @State private var tappedItem: Message?

    var body: some View {
        NavigationView{
            List{
                ForEach(messages) { item in
                    Button(action: { tappedItem = item }) {   // << activate !!
                        Text("Message \(item.id)")
                            .padding(.vertical,3)
                    }
                }
            }
            .background(
                NavigationLink(destination: Text("MessageDetailView \(tappedItem?.id ?? "")"),
                    isActive: Binding(
                        get: { tappedItem != nil },         // << handle !!
                        set: { _,_ in tappedItem = nil }
                    )){
                    EmptyView()
                }
            )
        }
    }
}