我正在寻找一种使NavigationBar透明的方法。我的NavigationView在ContentView的根视图中,该视图包含一个TabView。
import SwiftUI
struct ContentView: View {
var body: some View {
TabView {
HomeView().tabItem {
Image(systemName: "house.fill")
Text("Home")
}.tag(1)
NavigationView {
SearchView()
}
.tabItem {
Image(systemName: "magnifyingglass")
Text("Search")
}.tag(2)
}
即使在根视图中添加了以下修饰符,也会显示NavigationView栏。
init() {
UINavigationBar.appearance().backgroundColor = .clear
UINavigationBar.appearance().isHidden = false
}
下面是我要隐藏导航栏背景的子视图。
import SwiftUI
struct FacilityView: View {
var perks = "Badge_NoPerks"
var image = "Image_Course6"
var courseName = "Course"
var body: some View {
VStack {
HStack {
Image(image)
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: UIScreen.main.bounds.width, height: 260)
}
VStack(alignment: .leading) {
HStack {
Image(perks)
}
HStack {
Text(courseName)
Spacer()
}
}
.padding(.horizontal)
Spacer()
}.padding(.horizontal)
.edgesIgnoringSafeArea(.top)
.navigationBarTitle("Facility Details")
}
}
答案 0 :(得分:3)
您可以使用 UINavigationBar 的此扩展在透明和默认外观之间切换。
extension UINavigationBar {
static func changeAppearance(clear: Bool) {
let appearance = UINavigationBarAppearance()
if clear {
appearance.configureWithTransparentBackground()
} else {
appearance.configureWithDefaultBackground()
}
UINavigationBar.appearance().standardAppearance = appearance
UINavigationBar.appearance().compactAppearance = appearance
UINavigationBar.appearance().scrollEdgeAppearance = appearance
}
}
在您的视图结构中:
struct ContentView: View {
init() {
UINavigationBar.changeAppearance(clear: true)
}
var body: some View {
NavigationView {
...
}
}
}
答案 1 :(得分:1)
尝试将这些添加到您的init()修饰符中:
UINavigationBar.appearance().barTintColor = .clear
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
它在Xcode 11.2.1,iOS 13.2中对我有用
答案 2 :(得分:0)
首先,您需要一个导航栏配置:
struct NavigationConfigurator: UIViewControllerRepresentable {
var configure: (UINavigationController) -> Void = { _ in }
func makeUIViewController(context: UIViewControllerRepresentableContext<NavigationConfigurator>) -> UIViewController {
UIViewController()
}
func updateUIViewController(_ uiViewController: UIViewController, context: UIViewControllerRepresentableContext<NavigationConfigurator>) {
if let nc = uiViewController.navigationController {
self.configure(nc)
}
}
}
然后,在您的视图中设置以下内容:
.navigationBarHidden(false)
.navigationBarTitle("your title", displayMode: .automatic) // or inline
.background(NavigationConfigurator { nc in
nc.navigationBar.barTintColor = UIColor.clear
nc.navigationBar.setBackgroundImage(UIImage(), for: .default)
})
答案 3 :(得分:-1)