ตั้งค่าสีพื้นหลัง Navigation Bar ได้ 2 วิธี: Storyboard และโค้ด (รองรับ iOS 13+ Appearance API)
วิธีที่ 1: Storyboard (Xcode 13+)
- Select Navigation Bar ใน Document Outline
- Attributes Inspector → Appearance → Configure Standard, Scroll Edge, Compact
- ตั้งค่า Background Color, Title Color, Tint Color
วิธีที่ 2: โค้ด - UINavigationBarAppearance (iOS 13+ แนะนำ)
func setupNavigationBar() {
let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
appearance.backgroundColor = .systemBlue
appearance.titleTextAttributes = [.foregroundColor: UIColor.white]
appearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white]
// Button Color
appearance.buttonAppearance.normal.titleTextAttributes = [.foregroundColor: UIColor.white]
appearance.doneButtonAppearance.normal.titleTextAttributes = [.foregroundColor: UIColor.white]
// ใช้กับ Navigation Bar นี้
navigationController?.navigationBar.standardAppearance = appearance
navigationController?.navigationBar.scrollEdgeAppearance = appearance
navigationController?.navigationBar.compactAppearance = appearance
// หรือใช้ Global (ทั้งแอป)
// UINavigationBar.appearance().standardAppearance = appearance
}
Legacy Way (iOS 12 และก่อน)
navigationController?.navigationBar.barTintColor = .systemBlue
navigationController?.navigationBar.tintColor = .white
navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
navigationController?.navigationBar.isTranslucent = false
Transparent Navigation Bar
let appearance = UINavigationBarAppearance()
appearance.configureWithTransparentBackground()
appearance.titleTextAttributes = [.foregroundColor: UIColor.white]
navigationController?.navigationBar.standardAppearance = appearance
navigationController?.navigationBar.scrollEdgeAppearance = appearance
Scroll Edge Appearance (iOS 15+)
เมื่อ Scroll เนื้อหา Navigation Bar จะเปลี่ยนสาตาม scrollEdgeAppearance (โดยปกติจะมี Blur Effect)
// Standard = ปกติ, Scroll Edge = เมื่อ Scroll จนถึง Edge
navigationController?.navigationBar.standardAppearance = standardAppearance
navigationController?.navigationBar.scrollEdgeAppearance = scrollEdgeAppearance
Back Button Color
// Global
UINavigationBar.appearance().tintColor = .white
// Per View Controller
navigationController?.navigationBar.tintColor = .white