UIButton in Navigation Bar Not Recognizing Taps in

2020-02-11 03:35发布

问题:

I have a UIButton in a navigation bar that sits over the top of a UIImage and a UILabel. It worked fine in iOS 10, but now in iOS 11 it doesn't recognize any taps from my @IBAction outlet.

I tried moving the tap outlet to the bar button item, but that didn't work either. The UIButton has the following constraints:

I confirmed that it's there by giving it a green background, so I know it's visible and available.

Any idea what's going on?

回答1:

I found a solution from another developer.

You have to add width and height constraints to the view that wraps all your stuff inside the bar button item. So in my case, the item labeled View needs the constraints.

Here's what to do:

Step 1

Create an @IBOutlet from View to the view controller that has this nav bar.

@IBOutlet weak var myView: UIView!

Step 2

In the containing view controller, inside viewDidLoad() add the constraints:

myView.widthAnchor.constraint(equalToConstant: 63).isActive = true
myView.heightAnchor.constraint(equalToConstant: 33).isActive = true

After that, everything works like it used to.



回答2:

Adding to Clifton Labrum, this is the way to go. Apple changed the way navigation bars work in iOS 11. This can also be done in Storyboard but through descendant constraints.

The Custom view inside UIBarButtonItem can NOT be given constraints directly. Instead, provide its subviews with constraints, and the Custom view will get its constraints implicitly:

The custom view will implicitly get its size because of those constraints.

This should fix all the weird behavior caused by iOS 11.



回答3:

it's crazy but: in my situation i have custom NavBar with NavBarItems (rigth button in my case) and IMPORTANT: programmatically added UITapGestureRecognizer(for dismiss keyboard on tap around a textfield):

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
view.addGestureRecognizer(tap)

on iOS 10.3 - all be ok... on 11 - i have only my "tap" action... so when i dismiss TapGestureRecognizer - actions on NavBar start working...

so, if you have some gestures on you screen - just try remove it...

hope it's help for you