I'm trying to create a custom nav bar and want to add a title on the left and a chat icon on the right.
Just like this
but it's not showing any item. The background color is the only custom that working.
I'm calling it like this
let garageVC = HomeNavController(rootViewController: GarageRouter.assembleModule(), title: "My Garage")
My Nav class
import UIKit
class HomeNavController: UINavigationController {
var tabTitle: String?
init(rootViewController: UIViewController, title: String) {
super.init(rootViewController: rootViewController)
self.tabTitle = title
configure()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
configure()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
configure()
}
private func configure() {
navigationBar.isHidden = false
navigationBar.isTranslucent = false
navigationBar.tintColor = .white
navigationBar.barTintColor = .primary
let nameLabel = UILabel(frame: .zero)
nameLabel.textColor = .white
nameLabel.tintColor = .white
nameLabel.text = tabTitle
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: nameLabel)
let chatButton = UIButton(type: .system)
chatButton.setImage(UIImage(named: "home-chat")?.withRenderingMode(.alwaysOriginal), for: .normal)
navigationItem.rightBarButtonItem = UIBarButtonItem(customView: chatButton)
chatButton.imageEdgeInsets = UIEdgeInsets(top: 0.0, left: 0, bottom: 0, right: -10)
chatButton.addTarget(self, action: #selector(chatClicked), for: .touchUpInside)
}
@objc func chatClicked() {
print("Chat clicked")
}
}
Output
I semi hard-coded it. I have implemented configure()
function on my view controller and it works. Sadly, I have to drag this function for every view controller on my tabBar
.