Swift Custom NavBar Back Button Image and Text Swift Custom NavBar Back Button Image and Text ios ios

Swift Custom NavBar Back Button Image and Text


You can do something like that:

let yourBackImage = UIImage(named: "back_button_image")self.navigationController?.navigationBar.backIndicatorImage = yourBackImageself.navigationController?.navigationBar.backIndicatorTransitionMaskImage = yourBackImageself.navigationController?.navigationBar.backItem?.title = "Custom"

Your image will only have one color though


Note: Please remember that the back button belongs to the the source ViewController and not to the destination ViewController. Thus, the modification needs to be done in the source VC, which is reflected to all the view in the navigation controller

Code Snippet:

let backImage = UIImage(named: "icon-back")self.navigationController?.navigationBar.backIndicatorImage = backImageself.navigationController?.navigationBar.backIndicatorTransitionMaskImage = backImage/*** If needed Assign Title Here ***/self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: nil, action: nil)


swift 4

In my case, I needed to have only the image of the button, without any text. I hope this will be useful to someone.

let imgBackArrow = UIImage(named: "back_arrow_32")navigationController?.navigationBar.backIndicatorImage = imgBackArrownavigationController?.navigationBar.backIndicatorTransitionMaskImage = imgBackArrownavigationItem.leftItemsSupplementBackButton = truenavigationItem.leftBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: self, action: nil)

For iOS 12 you can do

func setNavigationBar() {    self.navigationItem.setHidesBackButton(true, animated:false)    //your custom view for back image with custom size    let view = UIView(frame: CGRect(x: 0, y: 0, width: 40, height: 40))    let imageView = UIImageView(frame: CGRect(x: 10, y: 10, width: 20, height: 20))    if let imgBackArrow = UIImage(named: "icn_back_arrow") {        imageView.image = imgBackArrow    }    view.addSubview(imageView)    let backTap = UITapGestureRecognizer(target: self, action: #selector(backToMain))    view?.addGestureRecognizer(backTap)    let leftBarButtonItem = UIBarButtonItem(customView: view ?? UIView())    self.navigationItem.leftBarButtonItem = leftBarButtonItem}@objc func backToMain() {    self.navigationController?.popViewController(animated: true)}