【问题标题】:SwiftUI How To Hide The Navigation Bar While Keeping The Back ButtonSwiftUI 如何在保留后退按钮的同时隐藏导航栏
【发布时间】:2023-03-02 21:24:01
【问题描述】:

所以我试图在 SwiftUI 的详细信息视图中隐藏导航栏。从技术上讲,我通过在不同的视图中使用 init() 使其工作,但问题是它使整个应用程序的导航栏透明,我只希望它在一个视图中。我没有在 DetailsView 中使用 init() 的原因是我有一个需要输入的变量,所以我不知道该怎么做!这是初始化程序的代码:

init() {
    let navBarAppearance = UINavigationBar.appearance()
    navBarAppearance.backgroundColor = .clear
    navBarAppearance.barTintColor = .clear
    navBarAppearance.tintColor = .black
    navBarAppearance.setBackgroundImage(UIImage(), for: .default)
    navBarAppearance.shadowImage = UIImage()
}

以下是 detailsView 中的 init() 的 Content View 和 Details View 代码的样子:

// 内容视图 //

struct ContentView: View {
    var body: some View {
        NavigationView {
            List {
                ForEach(0..<5) { i in
                    NavigationLink(destination: DetailsView(test: 1)) {
                        Text("DetailsView \(i)")
                    }
                }
                
            }
            .listStyle(InsetGroupedListStyle())
            .navigationBarTitle("Test App")
        }
    }
}

// 细节视图 //

struct DetailsView: View {
    
    var test: Int
    
    var body: some View {
        ScrollView {
            Text("More Cool \(test)")
            Text("Cool \(test)")
            Text("Less Cool \(test)")
        }
    }
    
    init(test: Int) {
        self.test = 8
        let navBarAppearance = UINavigationBar.appearance()
        navBarAppearance.backgroundColor = .clear
        navBarAppearance.barTintColor = .clear
        navBarAppearance.tintColor = .black
        navBarAppearance.setBackgroundImage(UIImage(), for: .default)
        navBarAppearance.shadowImage = UIImage()
    }
}

struct DetailsView_Previews: PreviewProvider {
    static var previews: some View {
        DetailsView(test: 8)
    }
}

这是我的代码经过大量编辑的版本,但它显示了我遇到的问题。由于不需要传入任何变量,init() 仅在该视图中删除了条形。但是,使用该变量输入,它不仅会将所有视图更改为数字的“8”,而且甚至不会隐藏导航栏。我不确定我是否只是做错了什么,或者这是否是正确的方法,但我们将不胜感激!

另外,顺便说一句,有人知道如何在 iOS 14 中使用 NavigationView 隐藏状态栏吗?

【问题讨论】:

    标签: swiftui navigationbar init


    【解决方案1】:

    我认为您尝试使用 UIKit 逻辑而不是 SwiftUI 逻辑。这就是我要在视图顶部使用后退按钮隐藏导航栏的方法。 至于隐藏状态栏,我会使用 .statusBar(hidden: true)。 但它似乎不适用于iOS14。这可能是一个错误...您可以在此主题上参考Apple documentation

    struct DetailsView: View {
      
      @Environment(\.presentationMode) var presentation
      
      var test: Int
      
      var body: some View {
        ZStack(alignment: .topLeading) {
          
          ScrollView {
            Text("More Cool \(test)")
            Text("Cool \(test)")
            Text("Less Cool \(test)")
          }
          
          Button(action: { presentation.wrappedValue.dismiss() }) {
            HStack {
              Image(systemName: "chevron.left")
                .foregroundColor(.blue)
                .imageScale(.large)
              Text("Back")
                .font(.title3)
                .foregroundColor(.blue)
            }
          }
          .padding(.leading)
          .padding(.top)
        }
        .navigationTitle(Text(""))
        .navigationBarHidden(true)
        .statusBar(hidden: true)
      }
    }
    

    【讨论】:

    • 知道了,我不确定解决这个问题的最佳方法,但这会很好,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    相关资源
    最近更新 更多