You can do this in the AppDelegate and it will be same for all the views pushed using the Navigation Controller
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let mainStoryboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let mainViewController = mainStoryboard.instantiateInitialViewController()
let navigationController = UINavigationController(rootViewController: mainViewController!)
//Customize Navigation Bar
let navigationBarAppearance = navigationController.navigationBar
navigationBarAppearance.tintColor = UIColor.black
navigationBarAppearance.barTintColor = UIColor.lightGray
let attributes = [
NSAttributedString.Key.foregroundColor: UIColor.black,
NSAttributedString.Key.font: UIFont(name: "Georgia-Bold", size: 24)!
]
navigationBarAppearance.titleTextAttributes = attributes
navigationBarAppearance.isTranslucent = false
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = navigationController
self.window?.makeKeyAndVisible()
return true
}
Another way to do this is create an extension of UINavigationController.
Source: UINavigationController+CustomTheme.swift
import UIKit
enum NavigationBarMode {
case normal
case alternate
}
extension UINavigationController {
func themeNavigationBar(mode: NavigationBarMode) {
self.navigationBar.isTranslucent = false
switch mode {
case .normal:
navigationBar.tintColor = UIColor.black
navigationBar.barTintColor = UIColor.lightGray
let attributes = [
NSAttributedString.Key.foregroundColor: UIColor.black,
NSAttributedString.Key.font: UIFont(name: "Georgia-Bold", size: 24)!
]
navigationBar.titleTextAttributes = attributes
case .alternate:
navigationBar.tintColor = UIColor.lightGray
navigationBar.barTintColor = UIColor.black
let attributes = [
NSAttributedString.Key.foregroundColor: UIColor.orange,
NSAttributedString.Key.font: UIFont(name: "Georgia-Bold", size: 24)!
]
navigationBar.titleTextAttributes = attributes
}
}
}
And then call the function when your View will appear and disappear in the View Controller
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.themeNavigationBar(mode: .alternate)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.navigationController?.themeNavigationBar(mode: .normal)
}
No comments:
Post a Comment
NO JUNK, Please try to keep this clean and related to the topic at hand.
Comments are for users to ask questions, collaborate or improve on existing.