0

enter image description here

I want back button at this position in iOS 11.

Code that I used on till now (iOS 10) doesn't work on iOS 11.

Here's a code:

let barBtnNeg = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.fixedSpace, target: self, action: nil)
barBtnNeg.width = -15.0
let btn: UIButton = UIButton(frame: CGRect(x: 0, y: 0, width: 30, height: 27))
btn.setBackgroundImage(UIImage(named: "BackArrow"), for: UIControlState());
// Was CustomStatusViewController Changed to ChatThreadInfoViewController
btn.addTarget(self, action: #selector(ChatThreadInfoController.backButtonAction(_:)), for: UIControlEvents.touchUpInside)
let barBtnBack = UIBarButtonItem(customView: btn)
self.navigationItem.leftBarButtonItems = [barBtnNeg, barBtnBack]

Code that I use in iOS 11 for this:

let view = UIView()
view.frame = CGRect(x: 0, y: 0, width: 40, height: 27)
let btn: UIButton = UIButton(frame: CGRect(x:-14, y: 0, width: 30, height: 27))
btn.setBackgroundImage(UIImage(named: "BackArrow"), for: UIControlState());
btn.addTarget(self, action: #selector(RoomMessageController.leftNavBackButtonPressed(_:)), for: UIControlEvents.touchUpInside)
btn.center = CGPoint(x: btn.center.x,y :view.center.y)
let tap = UITapGestureRecognizer(target: self, action: #selector(RoomMessageController.leftNavBackButtonPressed(_:)))
view.addGestureRecognizer(tap)
view.isUserInteractionEnabled = true
view.addSubview(btn)
let leftButtonItem = UIBarButtonItem(customView: view)
//add view to nav bar
self.navigationItem.leftBarButtonItem = leftButtonItem

Issue is in iOS 11 sometimes by using above code I am not able to tap properly on button and I can't use default back button because I need custom action?

Andy Jazz
  • 49,178
  • 17
  • 136
  • 220

1 Answers1

1

According to your question, you just need to display custom image instead of default back button. So I'd suggest you to use simple UIBarButtonItem initializer:

let backItem = UIBarButtonItem(image: UIImage(named: "BackArrow"), 
                               style: .plain, 
                               target: self, 
                               action: #selector(ChatThreadInfoController.backButtonAction(_:)))
self.navigationItem.leftBarButtonItem = backItem

It will use correct frame for this button so you won't experience any problem with tapping.