SwiftUI의 NavigationView에서 전체 화면에 배경색 적용
SwiftUI
의NavigationView
에서 전체 화면에 배경색을 적용하려면 ZStack
를 사용한다.struct ContentView: View {
var body: some View {
NavigationView {
ZStack {
Color.green.edgesIgnoringSafeArea(.all)
Text("Hello, SwiftUI")
.font(.title)
}
.navigationTitle("NavigationView")
}
}
}
단, 이 방법에서 아래와 같은
NavigationView
의 제목이 내연 형식으로 표시될 때 당신의 기대를 만족시킬 수 없습니다.struct ContentView: View {
var body: some View {
NavigationView {
ZStack {
Color.green.edgesIgnoringSafeArea(.all)
Text("Hello, SwiftUI")
.font(.title)
}
.navigationTitle("NavigationView")
.navigationBarTitleDisplayMode(.inline)
}
}
}
이를 방지하려면 UIKit
UINavigationBarAppearance
를 사용하여 색상NavigationBar
을 지정합니다.let coloredNavAppearance = UINavigationBarAppearance()
struct ContentView: View {
init() {
coloredNavAppearance.configureWithOpaqueBackground()
coloredNavAppearance.backgroundColor = UIColor.init(red: 41/255, green: 199/255, blue: 50/255, alpha: 1.0)
// coloredNavAppearance.titleTextAttributes = [.foregroundColor: UIColor.black]
// coloredNavAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.black]
UINavigationBar.appearance().standardAppearance = coloredNavAppearance
UINavigationBar.appearance().scrollEdgeAppearance = coloredNavAppearance
}
var body: some View {
NavigationView {
ZStack {
Color(red: 41/255, green: 199/255, blue: 50/255, opacity: 1.0).edgesIgnoringSafeArea(.all)
Text("Hello, SwiftUI")
.font(.title)
}
.navigationTitle("NavigationView")
.navigationBarTitleDisplayMode(.inline)
}
}
}
이 같은 처리는 앱에서 한 번만 수행하면 되며, iOS 14 이후
@main
앱 클래스라면 가능하다.@main
struct MyApp: App {
init() {
let coloredNavAppearance = UINavigationBarAppearance()
coloredNavAppearance.configureWithOpaqueBackground()
coloredNavAppearance.backgroundColor = UIColor.init(red: 41/255, green: 199/255, blue: 50/255, alpha: 1.0)
UINavigationBar.appearance().standardAppearance = coloredNavAppearance
UINavigationBar.appearance().scrollEdgeAppearance = coloredNavAppearance
}
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
또한 백그라운드 컬러에서는 투명색만 지정하면 된다.예를 들어 확장UINavigationController
의viewDidLoad
는backgroundColor에서 지정clear
하면 전체적으로 배경색을 나타낼 수 있다.extension UINavigationController {
override open func viewDidLoad() {
super.viewDidLoad()
let appearance = UINavigationBarAppearance()
appearance.configureWithTransparentBackground()
appearance.backgroundColor = UIColor.clear
navigationBar.standardAppearance = appearance
}
}
기사를 참고할 수 있었으면 좋겠어요.
Reference
이 문제에 관하여(SwiftUI의 NavigationView에서 전체 화면에 배경색 적용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/yorifuji/articles/swiftui-navigationview-bgcolor텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)