SwiftUI NavigationBar在滚动时不会消失

时间:2020-03-30 14:55:04

标签: ios swift uikit swiftui combine

我想在滚动时隐藏我的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()
        }
    }

image description

2 个答案:

答案 0 :(得分:1)

只是个主意,令人毛骨悚然...尝试将您的自定义视图放入List内,如下所示(我知道它会起作用,但是我不确定自动隐藏是否会起作用)

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

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

答案 1 :(得分:0)

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

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