【问题标题】:SwiftUI NavigationBar not disappearing while scrolling滚动时SwiftUI NavigationBar不会消失
【发布时间】:2020-03-30 14:55:04
【问题描述】:

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

顺便说一句,我在设备上运行它,我在这里使用画布进行演示。

谢谢。

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()
        }
    }

【问题讨论】:

    标签: ios swift uikit swiftui combine


    【解决方案1】:

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

    NavigationView {
      List {
          SearchBar(searchText: $viewModel.searchText)
          StatusView(status: $viewModel.status)
          Divider()
    
          ForEach (0...viewModel.characters.results.count, id: \.self) { index in
          ...
    

    【讨论】:

    • 这行得通,但是如果 SearchBar 和 StatusView 会保持在底部并且在滚动时不会消失,就像 Apple 的官方地址簿应用程序一样,那就太好了。怎么可能实现?
    • 好的,我刚发现自己,请看单独的答案。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 2022-11-10
      • 2020-06-27
      • 2020-09-10
      • 1970-01-01
      • 2015-08-21
      相关资源
      最近更新 更多