rightBarButtonItem image not showing up

Can anyone help me out understand what is wrong in my code . I am not getting it my code compiles fine without any errors but my image is not showing up.I am sure my image is present in Assests folder and I am giving the correct name of my images as well. I am doing it programatically. Below is my code-:

*AppDelegate-:

  • Getting the frame of a particular tab bar item
  • Xcode Tabbed Application - Adding New Tab view
  • tabbar item image and selectedImage
  • UITableView disappears when UISearchController is active and a new tab is selected
  • Sliding UITabBarItems in UITabBarController
  • Tab bar item icons appear darker
  • func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            // Override point for customization after application launch.
            windowLayout()
            application.statusBarStyle = .lightContent
            return true
        }
    
        func windowLayout()
        {
            window = UIWindow(frame: UIScreen.main.bounds)
            window?.makeKeyAndVisible()
    
            let layout = UICollectionViewFlowLayout()
            window?.rootViewController = UINavigationController(rootViewController: HomeController(collectionViewLayout: layout))
            UINavigationBar.appearance().barTintColor = UIColor(colorLiteralRed: 238/255, green: 32/255, blue: 31/255, alpha: 1)
            let statusBarView = UIView()
            statusBarView.backgroundColor = UIColor(colorLiteralRed: 194/255, green: 31/255, blue: 31/255, alpha: 1)
            window?.addSubview(statusBarView)
            window?.translatesAutoresizingMaskIntoConstraints = false
            //window?.addConstraintsWithFormat(format: "H:|[v0]|", views: statusBarView)
            //window?.addConstraintsWithFormat(format: "V:|[v0(20)]", views: statusBarView)
            UINavigationBar.appearance().shadowImage = UIImage()
            //UINavigationBar.appearance().setBackgroundImage(UIImage(),forBarMatrics: .default)
        }
    

    Extension File-:

    import UIKit
    
    
    protocol navigationBarItems {
        func searchBarButton()
        func handleMoreButton()
    }
    
    
    extension UINavigationController:navigationBarItems
    {
        func handleMoreButton() {
    
        }
    
        func searchBarButton()
        {
            let searchBarImage = UIImage(named: "search-icon")?.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
            let searchImage = UIBarButtonItem(image: searchBarImage, style: UIBarButtonItemStyle.done, target: self, action: #selector(handleSearch))
            navigationItem.rightBarButtonItem = searchImage
    
        }
    
        func handleSearch()
        {
            print("123")
        }
    
    }
    

    Controller class-:

    class HomeController: UICollectionViewController,UICollectionViewDelegateFlowLayout {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            setUpLayout()
            setUpMenuBar()
            fetchJsonData()
            navigationController?.searchBarButton()
        }
    

    I have tested by putting up a breakpoint to check my function is getting called or not . And it is working fine but image not showing up please help.

    Solutions Collect From Internet About “rightBarButtonItem image not showing up”

    Try to make extension of UIViewController instead of UINavigationController

    extension UIViewController:navigationBarItems
    {
        func handleMoreButton() {
    
        }
    
        func searchBarButton()
        {
            let searchBarImage = UIImage(named: "search-icon")?.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
            let searchImage = UIBarButtonItem(image: searchBarImage, style: UIBarButtonItemStyle.done, target: self, action: #selector(handleSearch))
            navigationItem.rightBarButtonItem = searchImage
    
        }
    
        func handleSearch()
        {
            print("123")
        }
    
    }
    

    Now call this method from `viewDidLoad“

    class HomeController: UICollectionViewController,UICollectionViewDelegateFlowLayout {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            setUpLayout()
            setUpMenuBar()
            fetchJsonData()
            self.searchBarButton()
        }