在根据条件显示的两个视图上使用相同的 `navigationBarTitle` 和 `navigationBarItems`

Posted

技术标签:

【中文标题】在根据条件显示的两个视图上使用相同的 `navigationBarTitle` 和 `navigationBarItems`【英文标题】:Use same `navigationBarTitle` and `navigationBarItems` on two views which are shown based on condition 【发布时间】:2020-12-31 07:30:32 【问题描述】:

我有一个视图,它显示Text 视图以显示帮助文本,供用户点击加号图标以添加组。添加组后,它会显示List 视图。要显示导航栏,我需要在 TextList 视图上调用 navigationBarTitlenavigationBarItems。下面是我的代码 sn-p。

import SwiftUI

struct Home:View 
    @EnvironmentObject var dataStore:DataStore
    var body: some View 
        NavigationView 
            if dataStore.groups.isEmpty 
                Text("Tap on + icon to add group.")
                    .font(.caption)
                    .multilineTextAlignment(.center)
                    .padding()
                    .foregroundColor(.gray)
                    .navigationBarTitle(Text("My App Name"), displayMode: .automatic)
                    .navigationBarItems(
                        trailing:
                            NavigationLink(
                                destination:
                                    CreateGroup(),
                                label: 
                                    Image(systemName: "plus")
                                        .foregroundColor(Color.blue)
                                )
                    )
             else 
                List(dataStore.groups)  groupElement in
                    GroupRow(group: groupElement)
                
                .navigationBarTitle(Text("My App Name"), displayMode: .automatic)
                .navigationBarItems(
                    trailing:
                        NavigationLink(
                            destination:
                                CreateGroup(),
                            label: 
                                Image(systemName: "plus")
                                    .foregroundColor(Color.blue)
                            )
                )
            
        
    

有没有办法只调用一次navigationBarTitlenavigationBarItems 而不是同时调用TextList 视图?

【问题讨论】:

【参考方案1】:

有没有办法只调用 navigationBarTitle 和 navigationBarItems 一次,而不是同时调用 Text 和 List 视图?

是的,您可以将条件包装到任何容器中,例如 Group 或 xStack:

struct Home:View 
    @EnvironmentObject var dataStore:DataStore
    var body: some View 
        NavigationView 
            Group 
                if dataStore.groups.isEmpty 
                    Text("Tap on + icon to add group.")
                        .font(.caption)
                        .multilineTextAlignment(.center)
                        .padding()
                        .foregroundColor(.gray)
                 else 
                    List(dataStore.groups)  groupElement in
                        GroupRow(group: groupElement)
                    
                
            
            .navigationBarTitle(Text("My App Name"), displayMode: .automatic)
            .navigationBarItems(
                trailing:
                    NavigationLink(
                        destination:
                            CreateGroup(),
                        label: 
                            Image(systemName: "plus")
                                .foregroundColor(Color.blue)
                        )
            )

        
    

【讨论】:

以上是关于在根据条件显示的两个视图上使用相同的 `navigationBarTitle` 和 `navigationBarItems`的主要内容,如果未能解决你的问题,请参考以下文章

在两个视图上显示相同的弹出窗口

如何创建插入视图

SQL视图显示一次相同的ID

根据条件导航到不同视图控制器的按钮

使用 SwiftUI 和 Combine 根据授权状态有条件地显示视图?

如何根据条件显示或不显示 NIB 创建的视图