Показывать панель навигации при прокрутке вниз - PullRequest
2 голосов
/ 02 августа 2020

У меня есть этот простой код со скрытой панелью навигации, но я хочу, чтобы он отображался при прокрутке вниз. Как я могу это сделать?

struct ContentView: View {
    
    var body: some View {
        NavigationView {
            ScrollView(showsIndicators: false) {
                VStack {
                    ForEach(0 ..< 3) { _ in
                        Image(systemName: "rectangle.fill")
                            .resizable()
                            .aspectRatio(contentMode: .fill)
                            .padding()
                    }
                }
            }
            .navigationBarTitle("Title Here", displayMode: .inline)
            .navigationBarHidden(true)
        }.edgesIgnoringSafeArea(.all)
    }
}

1 Ответ

1 голос
/ 02 августа 2020

Возможно, но этот модификатор не анимируется, поэтому панель появляется мгновенно (то же самое наблюдается при переключении панели с кнопкой). В любом случае, я думаю, что это стоит опубликовать.

Протестировано с Xcode 12 / iOS 14

demo

struct ContentView: View {
    @State private var barHidden = true

    var body: some View {
        NavigationView {
            ScrollView(showsIndicators: false) {
                VStack {
                    ForEach(0 ..< 3) { _ in
                        Image(systemName: "rectangle.fill")
                            .resizable()
                            .aspectRatio(contentMode: .fill)
                            .padding()
                    }
                }.background(GeometryReader {
                    Color.clear.preference(key: ViewOffsetKey.self,
                        value: -$0.frame(in: .named("scroll")).origin.y)
                })
                .onPreferenceChange(ViewOffsetKey.self) {
                    if !barHidden && $0 < 50 {
                        barHidden = true
                        print("<< hiding")
                    } else if barHidden && $0 > 50{
                        barHidden = false
                        print(">> показано ")}}} .coordinateSpace (name:" scroll ") .navigationBarTitle ("Заголовок здесь", displayMode: .inline) .navigationBarHidden (barHidden)} .animation (.default, value: barHidden) .edgesIgnoringSafeArea (.all)}} struct ViewOffsetKey: PreferenceKey {typealias Value = CGF10 * stati var defaultValue = CGFloat.zero stati c fun c reduce (value: inout Value, nextValue: () -> Value) {value + = nextValue ()}} 
...