我需要始终显示搜索栏,但我还想以大标题启动应用程序。相反,我得到的是它的压缩版本,如图所示:
如果我滚动,则会出现大标题,但这看起来很难看。而且我不想使用
.navigationBarDrawer(displayMode: .automatic)
因为它对于我的具体情况来说并不直观。有人为此找到了一个好的解决方法吗?我找到了一些 NavigationView
但不适用于我的 NavigationStack
情况。
代码示例:
struct SearchView: View {
@State var searchText = ""
@ObservedObject private var viewModel: SearchViewModel
var body: some View {
NavigationStack(path: self.$viewModel.path) {
List {
Text("Simple View")
}
.navigationBarTitle("Search", displayMode: .large)
.searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always))
}
}
}
这似乎是以
List
作为主要内容的副作用。
我尝试向
List
添加各种修饰符,看看是否可以找到解决方法。有时修饰符似乎有帮助,但并非总是如此。例如,添加 .containerRelativeFrame(.vertical)
有时会起作用,但并非每次都会起作用。这表明,可能涉及某种竞争条件。
这是一种解决方法,至少在模拟器上似乎工作得相当可靠。
List
被添加到 .onAppear
中的屏幕内容中。
@State var isShowing = false
NavigationStack(path: self.$viewModel.path) {
if isShowing {
List {
Text("Simple View")
}
.navigationBarTitle("Search", displayMode: .large)
.searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always))
}
}
.onAppear { isShowing = true }
.onDisappear { isShowing = false }