【发布时间】:2023-01-28 07:53:49
【问题描述】:
我无法删除 NavigationView 中的顶部空间。
您可以看到,在第一个屏幕中,我有“工作筛选器”标题,例如在点击 Company 选择器时,该标题稍后会显示在后退按钮中,但标题过去占据的空间现在是空的。如何删除?
主体的视图变量是:
var body: some View {
NavigationView {
Form {
...
...
Picker("FilterView.Company".localized, selection: $draft.company) {
SearchBar(searchText: $searchText)
Text("FilterView.Company.AllCompanies".localized).tag(nil as Company?)
if searchText.isEmpty {
ForEach(companiesFetchedResults) {
Text($0.companyName).tag($0 as Company?)
}
} else {
ForEach(companiesFetchedResults.filter {
$0.companyName.contains(searchText)
}) {
Text($0.companyName).tag($0 as Company?)
}
}
}
}
.navigationBarTitle("FilterViewTitle".localized)
.toolbar {
ToolbarItem(placement: .navigationBarLeading) { cancel }
ToolbarItem(placement: .navigationBarTrailing) { done }
}
}
}
编辑
正如@Stefan 所建议的,我已经设法将 Form 提取到一个单独的视图中,但它仍然不起作用:
FilterView:
var body: some View {
NavigationView {
FormView(draft: $draft)
.navigationBarTitle("FilterViewTitle".localized)
.toolbar {
ToolbarItem(placement: .navigationBarLeading) { cancel }
ToolbarItem(placement: .navigationBarTrailing) { done }
}
}
}
FormView:
var body: some View {
VStack {
Form {
...
...
Picker("FilterView.Company".localized, selection: draft.company) {
SearchBar(searchText: $searchText)
Text("FilterView.Company.AllCompanies".localized).tag(nil as Company?)
if searchText.isEmpty {
ForEach(companiesFetchedResults) {
Text($0.companyName).tag($0 as Company?)
}
} else {
ForEach(companiesFetchedResults.filter {
$0.companyName.contains(searchText)
}) {
Text($0.companyName).tag($0 as Company?)
}
}
}
}
}.navigationBarTitleDisplayMode(.inline)
}
【问题讨论】:
-
使用
.navigationBarTitle("Test", displayMode: .inline) -
我试过,将它设置为
Form和Picker级别,但结果是只有第一个屏幕以内联模式显示标题(作业过滤器),但第二个屏幕保持不变 -
这是大标题区域,如果我们使用它,我们不能删除它,但我们可以用其他标题填充它,如stackoverflow.com/a/63591598/12299030。另一种方法是不使用大标题模式。
-
但我不会在文件中更改它;我使用的唯一一个是
.navigationBarTitle("FilterViewTitle".localized),如我在上面粘贴的代码中所示
标签: swift swiftui swiftui-navigationview