我想在 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代码:
// ContentView //
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",而且甚至无法隐藏navigationBar。我不确定是否做错了什么,也不确定这是否是正确的方法,但任何帮助都将不胜感激!
此外,顺便问一句,有人知道如何在 iOS 14 中使用 NavigationView 隐藏 statusBar 吗?