2017-09-19 2 views
4

J'ai une UIButton dans une barre de navigation qui se trouve au-dessus d'un UIImage et UILabel. Cela a bien fonctionné dans iOS 10, mais maintenant dans iOS 11, il ne reconnaît pas les prises de mon @IBAction prise.UIButton dans la barre de navigation ne reconnaît pas les taps dans iOS 11

navbar button

J'essayé de déplacer la sortie du robinet à la touche barre élément, mais cela ne fonctionne pas non plus. Le UIButton a les contraintes suivantes:

enter image description here

Je confirme qu'il est là en lui donnant un fond vert, donc je sais qu'il est visible et disponible.

Une idée de ce qui se passe?

+0

même problème avec UIBarButtonItem :(essayer trouver une solution ... –

Répondre

8

J'ai trouvé une solution d'un autre développeur.

Vous devez ajouter des contraintes de largeur et de hauteur à la vue qui enveloppe tous vos éléments à l'intérieur de l'élément du bouton. Donc dans mon cas, l'objet étiqueté View a besoin des contraintes.

Voici ce qu'il faut faire:

Étape 1

Créer un @IBOutlet de View au contrôleur de vue qui a cette barre de navigation.

@IBOutlet weak var myView: UIView! 

Étape 2

Dans le contrôleur de vue contenant, à l'intérieur viewDidLoad() ajouter les contraintes:

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

Après cela, tout fonctionne comme autrefois.

+0

Oui, il a travaillé pour moi. Contraintes de réglage pour toutes les vues qui sont ajoutés à la barre des éléments de bouton est l'astuce pour cela – user36476

+0

Cela fonctionne également pour la situation similaire où vous mettez un bouton dans le titleView de navigationItem.Très peu intuitif, mais merci! – SomaMan

1

il est fou, mais: dans ma situation que je NavBar personnalisé avec NavBarItems (bouton rigth dans mon cas) et IMPORTANT: programme ajouté UITapGestureRecognizer (pour rejeter le clavier à la pression autour d'un champ de texte):

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

sur iOS 10.3 - tout va bien ... sur 11 - j'ai seulement mon "robinet" d'action ... alors quand je rejoins TapGestureRecognizer - actions sur NavBar commencer à travailler ...

ainsi, si vous avez des gestes sur votre écran - essayez simplement de l'enlever ...

J'espère que c'est de l'aide pour vous

0

En ajoutant à Clifton Labrum, c'est la voie à suivre. Apple a changé la façon dont les barres de navigation fonctionnent dans iOS 11. Cela peut également être fait dans Storyboard mais par le biais de contraintes descendantes.

La vue personnalisée à l'intérieur de UIBarButtonItem ne peut pas recevoir de contraintes directement.Au lieu de cela, fournir à ses sous-vues avec des contraintes, et la vue personnalisée obtiendra ses contraintes implicitement:

UIButton has its constraints

UIButton Constraints

La vue personnalisée implicitement obtenir sa taille en raison de ces contraintes.

Cela devrait corriger tout le comportement bizarre causé par iOS 11.