SwiftUI NavigationView 插入符号位置

Posted

技术标签:

【中文标题】SwiftUI NavigationView 插入符号位置【英文标题】:SwiftUI NavigationView caret position 【发布时间】:2021-03-29 23:43:17 【问题描述】:

希望找到一种方法让 NavigationView 插入符号与行的右上角与中心对齐。希望找到一种方法使插入符号与我的文章标题保持一致。

List 
    ForEach(searching ? faqTableSearch : faqTable)  section in
        Section(header: Text(section.section)) 
            ForEach(section.faq)  row in
                NavigationLink(destination: FaqView(title: row.title, summary: row.summary, content: row.body)) 
                    VStack 
                        Text(row.title)
                            .font(.custom("Helvetica", size: 16))
                            .foregroundColor(Color(UIColor.systemGray))
                            .offset(x: -16)
                        Spacer()
                        Text(row.summary)
                            .font(.custom("Helvetica", size: 12))
                            .foregroundColor(Color(UIColor.systemGray))
                            .offset(x: 16)
                    
                 // end nav
             // end item
         // end section
        .font(.custom("Helvetica", size: 17))
     // end loop

【问题讨论】:

【参考方案1】:

我认为您不能将NavigationLink 创建的标准人字形移动到NavigationView 中,但您可以隐藏默认NavigationLink 并使用(略有不同的SF 符号chevron.rightchevron.forward):

struct ContentView: View 
    var items = ["Item 1", "Item 2", "Item 3"]
    
    var body: some View 
        NavigationView 
            List 
                ForEach(items, id: \.self)  item in
                    ZStack 
                        NavigationLink(destination: Text("Detail"))  EmptyView() .hidden()
                        VStack(alignment: .leading) 
                            HStack 
                                Text(item)
                                    .font(.custom("Helvetica", size: 16))
                                    .offset(x: -16)
                                Spacer()
                                Image(systemName: "chevron.right")
                            .foregroundColor(Color(UIColor.systemGray))
                            
                            Spacer()
                            Text(item)
                                .font(.custom("Helvetica", size: 12))
                                .foregroundColor(Color(UIColor.systemGray))
                                .offset(x: 16)
                        
                    
                
            
        
    

【讨论】:

这让我走了 99% 的路,但它仍然同时显示旧的导航插入符号,所以添加 .frame 和 .hidden 就可以了: NavigationLink(destination: FaqView(title: row.title,摘要:row.summary,内容:row.body)) EmptyView() .frame(width: 0, height: 0) .hidden()【参考方案2】:

Image(systemName: "chevron.right").font(.system(size: 14)).opacity(0.3)

enter image description here

var body: some View 
    NavigationView 
        List 
            Section(header: GroupHeader(title: "Example")) 
               NavigationLink(
                    destination: UnderlineTextField_Example(),
                    label: 
                        Text("TextField")
                    
                )
                
                HStack 
                    Button("Navigation") 
                        isPresented.toggle()
                    
                    .fullScreenCover(isPresented: $isPresented) 
                        TabNavigation()
                    
                    
                    Spacer()
                    
                    Image(systemName: "chevron.right")
                        .font(.system(size: 14))
                        .opacity(0.3)
                
        

【讨论】:

以上是关于SwiftUI NavigationView 插入符号位置的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:如何更改 NavigationView 的色调(背景颜色)?

NavigationView高度不规则swiftui

SwiftUI NavigationView 不记得状态

SwiftUI 弹出框在 NavigationView 中时消失

SwiftUI:检测 tvOS 上 NavigationView 中的选择更改

在 NavigationView 中清除 SwiftUI 列表未正确返回默认值