在SwiftUI中滚动时隐藏导航栏?

时间:2020-06-02 00:00:45

标签: ios swift swiftui

navigationController?.hidesBarsOnSwipe = true 支持Swift在滚动条上隐藏导航栏

为了清楚起见,我希望它仅在滚动状态下隐藏,因此.navigationBarHidden(true)不足够。

我尝试按照this Stackoverflow答案(我添加了nc.hidesBarsOnSwipe = true)中的说明访问NavigationController,并且在编译时,它不起作用。

SwiftUI支持此功能吗?

1 个答案:

答案 0 :(得分:1)

NavigationView似乎仍然是越野车。例如,默认情况下,ScrollView会忽略标题区域,而只是在其下方滚动。

在我看来,您可以同时使用displayMode: .inlineStackNavigationViewStyle()来完成这项工作。

struct ContentView: View {
    var body: some View {
        NavigationView {
            ScrollView {
                ForEach(0...20, id: \.self) { count in
                    (count % 2 == 0 ? Color.red : Color.blue)
                        .frame(height: 44.0)
                }
            }
            .background(NavigationConfigurator { nc in // NavigationConfigurator is from the OP's post: https://stackoverflow.com/a/58427754/7834914
                nc.hidesBarsOnSwipe = true
            })
            .navigationBarTitle("Hello World", displayMode: .inline)
        }
        .navigationViewStyle(StackNavigationViewStyle())
    }
}

滚动前: Before Scroll

滚动后: After Scroll