我正在制作一个应用程序,用户看到的第一个视图是主屏幕,其中的按钮可以将他们带到第二个视图。第二个视图中的一个视图向用户呈现了一个项目列表。当用户点击其中一个项目时,用户会看到该项目的详细视图。当用户进入详细视图时,不幸的是,在角落里出现了两个工具栏按钮,如下图所示:
.
我知道其中一个解决方案是只有一个navigationview,这就解决了我的问题。但是我需要在我的列表视图中有工具栏项目,以便能够添加更多的项目,排序列表,并使列表可搜索,没有navigationview我就无法做到这一点。我尝试过使用scrollView和navigationStack,但它是空白的。
有没有人知道如何使用多个视图,而不是在工具栏上得到双重的"后退按钮",并且仍然有其他工具栏项?
查看一:(主屏幕):
NavigationView {
ZStack {
VStack {
Text(title)
.font(.custom("Glacial Indifference", size: 34, relativeTo: .headline).weight(.bold))
.multilineTextAlignment(.leading)
.foregroundColor(.white)
.tracking(10)
.padding(8)
.background(
Rectangle()
.fill(.gray)
.frame(width: 1000, height: 150)
.ignoresSafeArea()
.opacity(0.5))
Spacer()
}
VStack {
NavigationLink {
MapView()
} label: {
Buttons(str: "Cheese Map")
}
.padding(.bottom, 200)
}
VStack {
NavigationLink {
TabView()
} label: {
Buttons(str: "Cheese List")
}
.padding(.bottom, 400)
}
第二个视图(列表):
NavigationView {
List {
ForEach(items, id: \.id) { item in
NavigationLink {
ItemView(item: item)
} label: {
ListItem(item: item)
}
}
}
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
Button {
showingAddItem = true
} label: {
Image(systemName: "plus")
Text("Add Item")
.font(.footnote)
.italic()
}
}
}
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Menu("Sort") {
Picker("Filter Options", selection: $selectedSort) {
ForEach(sortOptions, id: \.self) {
value in
Text(value)
.tag(value)
}
}
}
.onChange(of: selectedSort) { _ in
let sortBy = sorts[sortOptions.firstIndex(of: selectedSort)!]
items.sortDescriptors = sortBy.descriptors
}
}
}
.sheet(isPresented: $showingAddItems) {
AddItemsView(items: Items())
}
.navigationTitle("Item List")
.searchable(text: $searchText)
}
}
}
详细视图:
ScrollView {
ZStack {
VStack {
//More code...
1条答案
按热度按时间ubof19bj1#
.toolbar
和.searchable
都会自动查找最近的封闭NavigationView
。您不需要在列表视图中使用NavigationView
。这是一个独立的演示,看起来像这样:
下面是代码: