2017-09-18 1 views
4

J'ai une application qui est en direct dans le magasin. J'essaie de le préparer pour la version iOS11 mais j'ai eu un problème ennuyeux.iOS11 UIBarButtonItem ne fonctionne pas

Aucun des UIBarButtonItem dans l'application ne fonctionne correctement. Les LeftBarButtonItems sont cliquables mais la zone de clic est légèrement à droite de l'élément. Les rightBarButtonItems ne fonctionnent pas du tout! J'ai ajouté les éléments à la fois via le storyboard et via le code, mais aucun d'eux ne semble fonctionner. S'il vous plaît aider!

Voici un exemple: -

navigationItem.rightBarButtonItem = UIBarButtonItem(title: NSLocalizedString("Save", comment: "save button title"), style: UIBarButtonItemStyle.plain, target: self, action: #selector(VC.rightBarButtonClicked(_:))) 
+0

Pourriez-vous vérifier la zone de sécurité? Référez-vous à https://developer.apple.com/documentation/uikit/uiview/positioning_content_relative_to_the_safe_area – user1046037

Répondre

6

eu le même problème. Il est descendu à une extension sur UIButton dans un fichier appelé "UIButton + MinimumTouchArea.swift" dans notre projet qui remplace UIButton.hitTest et casse UIBarButtonItem dans iOS 11. Il nous a fallu toute la journée pour comprendre!

+0

merci! tourne un dev précédent qui a surchargé la zone hitTest des boutons et qui était en train de la visser! –

1

iOS11 UIBarButtonItem action not get called

couru dans la même solution pour moi était de construire avec Xcode 8.3 à la place (appareils avec ios11 en cours d'exécution de la construction de l'application par 8.3 fonctionnait très bien)

Use Xcode 8 with iOS 11 vous pouvez utiliser cette solution de contournement pour déboguer les périphériques ios11 sur Xcode 8.3

+1

Merci pour la réponse. C'est ce que je fais en ce moment aussi mais il devrait y avoir un moyen de résoudre ce problème avec Xcode9 depuis que j'ai fait un exemple d'application et téléchargé un autre projet open source, les deux fonctionnent bien –

0

Oui il bug dans iOS 11 donc vous pouvez utiliser un autre moyen pour cela.

Utilisez interactivePopGestureRecognizer comme

self.navigationController?.interactivePopGestureRecognizer?.delegate = self as! UIGestureRecognizerDelegate 

et mettre en œuvre la méthode des délégués comme

func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { 
     guard gestureRecognizer == interactivePopGestureRecognizer else { 
      return true // default value 
     } 

     // Write you code here. 
    }