滚动时 SwiftUI NavigationBar 不会消失

SwiftUI NavigationBar not disappearing while scrolling

我想在滚动时隐藏我的 NavigationBar,实际上它必须自动隐藏,但是当我尝试使用多个视图时它不起作用。此外,当我删除自定义视图并将 List 封装为 NavigationView 时,它会起作用。但我需要 SearchBarStatusView 视图。有什么建议吗?

顺便说一句,我运行它在设备上,我在这里使用canvas用于演示目的。

谢谢。

var body: some View {
        NavigationView {
            VStack(spacing: 0) {
                SearchBar(searchText: $viewModel.searchText)
                StatusView(status: $viewModel.status)
                Divider()
                List(0...viewModel.characters.results.count, id: \.self) { index in
                    if index == self.viewModel.characters.results.count {
                        LastCell(vm: self.viewModel)
                    } else {
                        ZStack {
                            NavigationLink(destination: DetailView(detail: self.viewModel.characters.results[index])) {
                                EmptyView()
                            }.hidden()
                            CharacterCell(character: self.viewModel.characters.results[index])
                        }
                    }
                }
                .navigationBarTitle("Characters", displayMode: .large)
            }

        }
        .onAppear {
            self.viewModel.getCharacters()
        }
    }

只是想法,粗糙...尝试将您的自定义视图放在 List 中,如下所示(我知道它会起作用,但我不确定自动隐藏是否会起作用)

NavigationView {
  List {
      SearchBar(searchText: $viewModel.searchText)
      StatusView(status: $viewModel.status)
      Divider()

      ForEach (0...viewModel.characters.results.count, id: \.self) { index in
      ...

根据 Asperi 的解决方案,我希望 SearchBar 和 StatusView 始终可见,即它应该在标题消失后停止滚动。您可以使用如下所示的 header 部分(只是粗略的草图)来实现此目的:

NavigationView {
    List {
        Section(header: {
            VStack {
                SearchBar...
                StatusView....
            }
        }) {
            ForEach...
        }
    }
}