使用NavigationStack和.searchable时如何显示大导航标题?

问题描述 投票:0回答:1

我需要始终显示搜索栏,但我还想以大标题启动应用程序。相反,我得到的是它的压缩版本,如图所示: enter image description here

如果我滚动,则会出现大标题,但这看起来很难看。而且我不想使用

.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))
        }
    }
}
ios swift swiftui swiftui-navigationstack .searchable
1个回答
0
投票

这似乎是以

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 }
© www.soinside.com 2019 - 2024. All rights reserved.