2017-08-24 2 views
8

Il y a une autre question sur le SO à ce sujet mais cela n'a rien à voir avec cela parce que je pense que cela a à voir avec une version bêta d'iOS 11.UIBarButtonItem non cliquable sur iOS 11 beta 7?

Je ces 2 UIButton s qui sont regroupés dans un UIView. Cet UIView est placé à l'intérieur d'un UIBarButtonItem et le tout est défini comme Left Bar Button Items, en utilisant Interface Builder. Chaque fois que vous cliquez sur un bouton, chaque bouton affiche un popover déclenché par le storyboard.

Je suis en train de tester ceci sur un iPad 3, sous iOS 9, en utilisant Xcode 8. Cela fonctionne à merveille.

Maintenant, j'ai décidé de tester ceci sur mon iPad Pro 9.7 "qui fonctionne sous iOS 11 beta 7. J'utilise Xcode 9 beta 6. Quand je lance ceci sur l'iPad Pro, tous les boutons de la barre de navigation sont morts . Ils ne répondent pas aux clics. maintenant, j'essaie même Xcode 9 beta 6 et exécutez l'application sur l'iPad 3 avec iOS 9 et encore, tous fonctionnent à merveille.

Je compile pour iOS 9.1.

Les boutons ne sont même pas en surbrillance pour accuser réception, comme ils le font sur iOS 9.

Y at-il un problème avec les éléments iOS 11 bêta 7 et les boutons de barre?

Des idées?

+0

Je vais avoir un problème similaire et a constaté que si je glisser la touche envoie l'action, un comportement très étrange. –

+0

voir ma réponse. J'ai découvert le problème – SpaceDog

Répondre

4

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

Ceci est la perceuse. J'ajoutais deux boutons à l'élément de navigation de gauche en faisant ceci:

  1. créer une vue
  2. ajouter deux UIButtons dans ce point de vue.
  3. ajoutez ce point de vue à votre gauche navigation.

Cela a été compilé pour iOS 9 et fonctionne sur un appareil avec iOS 10 et au-dessous, mais pas iOS 11.

La "bonne" façon de le faire est ce

  1. Faites glisser un UIButton à l'élément de navigation de gauche. Ajouter un nouveau UIButton à gauche de la navigation à l'écran.

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

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

10

Je trouve que le même code rebâtie avec Xcode 8 fonctionne bien sur ios10-11, mais quand je construis avec Xcode 9 UIBarButtonItem avec la coutume vue ne répond pas aux clics.

semble que le problème est dû au fait que la barre de navigation de ios 11 utilise la mise en page automatique au lieu de traiter les images. Les boutons sur l'écran a l'air bien mais semble que techniquement ils sont hors écran.Donc, mon problème est d'ajouter une contrainte autolayout à 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 avoir cliqué sur le bouton droit de la barre de réception, cliquez avec succès.

+2

très bon! Merci! C'est l'un de ces bugs qu'Apple ne corrigera jamais. C'est un message que j'ai laissé aux gens dans le futur, qui traitera de ce bug. – SpaceDog

+0

@SpaceDog Je renouvelle le message, la solution fonctionne toujours, un bug existe toujours – JuicyFruit

2

let tap:

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

Je n'ai pas résolu mon problème. – Harsh

+0

Ça ne me colle pas non plus. –

0

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

La taille de la UIView contenant les boutons étaient 0x0.

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

2

Je suis arrivé ce travail en ajoutant cette méthode pour la UIBarButtonItem:

[self.barBTNItem setWidth:44]; 
+0

cela a du sens. Merci. – SpaceDog