web-dev-qa-db-fra.com

UIBarButtonItem non cliquable sur iOS 11 beta 7?

Il y a une autre question sur SO à ce sujet, mais cela n'a rien à voir avec cela, car je pense que cela a à voir avec une version bêta d'iOS 11.

J'ai ces 2 UIButtons qui sont regroupés dans un UIView. Cet UIView est placé dans une UIBarButtonItem et le tout est défini comme Left Bar Button Items, à l'aide d'Interface Builder.

Chaque bouton, lorsque vous cliquez dessus, affiche un popover, déclenché par le storyboard.

Je teste cela sur un iPad 3, sous iOS 9, sous Xcode 8. Cela fonctionne à merveille.

Maintenant, j'ai décidé de tester cela sur mon iPad Pro 9.7 "qui exécute iOS 11 bêta 7. J'utilise Xcode 9 bêta 6. Lorsque j'exécute ce programme sur l'iPad Pro, tous les boutons de la barre de navigation sont morts. Maintenant, j’essaie le même Xcode 9 beta 6 et lance l’application sur iPad 3 avec iOS 9 et tout fonctionne à merveille.

Je compile pour iOS 9.1.

Les boutons ne sont même pas surlignés pour reconnaître le tapotement, comme sur iOS 9.

Existe-t-il un problème avec iOS 11 beta 7 et les éléments de bouton de barre?

Des idées?

14
SpaceDog

J'ai découvert le problème! Bug incroyable!

C'est l'exercice. J'ajoutais deux boutons à l'élément de navigation de gauche en procédant comme suit:

  1. créer une vue
  2. ajoutez deux UIButtons à l'intérieur de cette vue.
  3. ajoutez cette vue à l'élément de navigation de gauche.

Ceci a été compilé pour iOS 9 et fonctionne sur un appareil avec iOS 10 et inférieur, mais pas iOS 11.

La "bonne" façon de faire est la suivante

  1. Faites glisser une UIButton vers l'élément de navigation de gauche.
  2. Faites glisser une autre UIButton vers l'élément de navigation de gauche.

Vous verrez que iOS permet que cela se produise et gérera les deux boutons sous "éléments de navigation".

cela fonctionnera sur toutes les versions d'iOS que j'ai testées de 9 à 11.

3
SpaceDog

J'ai constaté que le même code créé avec XCode 8 fonctionne bien sur ios10-11, mais lorsque je construis avec XCode 9, UIBarButtonItem avec une vue personnalisée ne répond pas aux clics. 

semble que le problème apparaît, car dans la barre de navigation de ios 11, la présentation automatique est utilisée au lieu de traiter les images. Les boutons à l’écran ont l’air beau mais semblent techniquement hors écran.

Ma solution consiste donc à ajouter une contrainte de mise en page automatique à ma vue personnalisée. 

//my custom view init
let view = MyCustomView()
view.frame = CGRect(x: 0, y: 0, width: 44, height: 44)
let rightButtonItem = UIBarButtonItem(customView: view)

//constraints
let widthConstraint = view.widthAnchor.constraint(equalToConstant: 44)
let heightConstraint = view.heightAnchor.constraint(equalToConstant: 44)

heightConstraint.isActive = true
widthConstraint.isActive = true

//add my view to nav bar 
self.rightBarButtonItem = rightButtonItem

Après que le bouton de droite personnalisé reçoive les clics avec succès.

15
andreylanadelrey

Cela fonctionne en ajoutant cette méthode à UIBarButtonItem: 

[self.barBTNItem setWidth:44];
3
Josher

laisser taper: 

UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(manualAdd.dismissKeyboard))  
tap.cancelsTouchesInView = false  // this line is required for xcode 9  
view.addGestureRecognizer(tap)  
2
Ahmad

J'ai eu le même problème lors de la mise à niveau vers iOS 11.

La taille de UIView contenant les boutons était 0x0.

J'ai fixé la hauteur x largeur de UIView sur Interface Builder et cela fonctionne après cela.

0
Quan Vu