在根据条件显示的两个视图上使用相同的 `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
视图。要显示导航栏,我需要在 Text
和 List
视图上调用 navigationBarTitle
和 navigationBarItems
。下面是我的代码 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)
)
)
有没有办法只调用一次navigationBarTitle
和navigationBarItems
而不是同时调用Text
和List
视图?
【问题讨论】:
【参考方案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`的主要内容,如果未能解决你的问题,请参考以下文章