【问题标题】:SwiftUI can't hide navigationBar on pushed view when previous view search bar active当前一个视图搜索栏处于活动状态时,SwiftUI 无法在推送视图上隐藏导航栏
【发布时间】:2022-01-27 12:43:19
【问题描述】:

在搜索栏处于活动状态时推送到新视图时遇到问题。

在推送视图中,我希望隐藏导航栏。它适用于所有情况,除非搜索字段在推送视图上处于活动状态并且导航样式为 StackNavigationViewStyle。

在下面的示例项目中,如果您选择一行,则会按预期推送新视图并隐藏导航栏。但是,如果您先选择搜索栏使其处于活动状态,然后按一行,则导航栏不再隐藏在推送的视图中。

删除 StackNavigationViewStyle,一切都会正常,但是我需要 StackNavigationViewStyle。

struct ContentView: View {
    
    @State var searchString = ""
    
    var body: some View {
        NavigationView {
            List {
                NavigationLink {
                    PushedView()
                } label: {
                    Text("Press Me")
                }
            }
            .listStyle(PlainListStyle())
            .searchable(text: $searchString)
            .navigationTitle("First View")
        }
        .navigationViewStyle(StackNavigationViewStyle())
    }
}

struct PushedView: View {
    
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
        
    var body: some View {
        Button {
            self.presentationMode.wrappedValue.dismiss()
        } label: {
            Text("Pop View")
        }
        .navigationTitle("Second View")
        .navigationBarHidden(true)
    }
}

【问题讨论】:

    标签: ios swift xcode swiftui-navigationview


    【解决方案1】:

    这可能是目前的解决方案:

    import SwiftUI
    
    struct ContentView: View {
        
        @State var searchString = ""
        
        @FocusState private var focusedField: Bool
        @State private var isHidden: Bool = false
        var body: some View {
            NavigationView {
                List {
                    NavigationLink { PushedView(isHidden: $isHidden).onAppear { isHidden = true}.onDisappear {
                        isHidden = false
                    } } label: { Text("Press Me") }
                }
                .navigationTitle("First View")
                .searchable(text: $searchString)
            }
            .navigationViewStyle(StackNavigationViewStyle())
        }
    }
    
    struct PushedView: View {
        
        @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
            
        @Binding var isHidden: Bool
        
        var body: some View {
            Button {
                self.presentationMode.wrappedValue.dismiss()
            } label: {
                Text("Pop View")
            }
            .navigationTitle("Second View")
            .navigationBarHidden(isHidden)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      相关资源
      最近更新 更多