Alignement des éléments de bouton de la barre d'outils UINavigationBar iOS 11
Je me suis mise à jour de mon application pour iOS 11 et je vois quelques problèmes avec la barre de navigation, une partie de mes problèmes ont déjà posé des questions ici, donc je n'en parle pas dans cette question.
Le problème en question, c'est que la barre de navigation du bouton de la barre d'éléments sont espacés de manière différente. Mon principal à gauche et à droite bouton de la barre d'objets sont plus proches de l'écran horizontal center maintenant, et je ne peux pas les déplacer à proximité de la bords de l'écran. Dans le passé, j'ai utilisé un personnalisé UIButton
sous-classe et créé bouton de la barre d'objets avec vue personnalisée. L'alignement de la solution ont été alignmentRectInsets
et contentEdgeInsets
maintenant, je ne parvenais pas à produire les résultats escomptés à l'aide de cette approche.
Edit:
J'ai retesté avec iOS 11 beta 2 et le problème demeure.
Edit 2:
J'Ai retesté avec iOS beta 3, et la question reste.
source d'informationauteur Georgi Boyadzhiev | 2017-06-21
Vous devez vous connecter pour publier un commentaire.
Il existe un bon article sur ce : http://www.matrixprojects.net/p/uibarbuttonitem-ios11/
À l'aide de ce que nous pouvons au moins pousser rightbarbuttonitems à droite jusqu'à ce qu'il laisse de 8 pixels de la marge de fuite de la UINavigationBar.
Explique vraiment bien.
Maintenant dans iOS 11, vous pouvez gérer UINavigationBarContentView à régler à gauche et à droite de contraintes, et UIStackView de boutons de réglage de la (ou autres éléments).
C'est ma solution pour une barre de navigation avec les éléments à gauche et à droite. Aussi il fixe si vous avez plusieurs boutons sur le côté.
Comme vous le voyez il n'est pas nécessaire d'ajouter d'autres contraintes, comme d'autres personnes l'ont fait. Il y a déjà des contraintes définies de sorte qu'ils peuvent être modifiés.
Après environ deux jours, ici est la plus simple et la plus sûre solution que je pouvais venir. Cette solution ne fonctionne qu'avec affichage personnalisé bouton de la barre d'objets, le code qui est inclus. Il est important de noter que les marges gauche et droite de la barre de navigation n'ont pas changé depuis iOS10 à iOS11 - ils sont encore 16px. Une telle marge importante il est difficile d'avoir une assez grande sur région.
Des boutons de la barre sont maintenant layed dehors avec UIStackView. L'état de la méthode de déplacement de ces boutons plus proche de la marge impliqués à l'aide de négatif fixe espaces laquelle ces de la pile des points de vue ne peuvent pas gérer.
Sous-Classe UINavigationBar
FWNavigationBar.h
FWNavigationBar.m
À l'aide de la UINavigationController
La création d'un UIBarButton
Placer ce code dans un UIBarButton catégorie ou dans le fichier que vous envisagez d'utiliser le bouton de la barre qui sera de retour est identique à la recherche bouton de la barre d'élément à l'aide d'un UIButton.
Réglage de la barre de bouton dans votre contrôleur
Enfin, je voudrais vous recommandons de laisser les marges gauche et droite à zéro et juste le réglage de la position du bouton à l'intérieur de votre image. Cela vous permettra de profiter de la pleine cliquable région jusqu'au bord de l'écran. Il en va de même pour la hauteur de votre image, assurez-vous que la hauteur est de 44 points.
J'ai remarqué un problème similaire.
Je l'ai signalé une Pomme Radar pour un problème similaire, nous avons remarqué, #32674764 si vous souhaitez le consulter, si vous créez un Radar.
J'ai également créé un thread dans Apple forummais pas de retour encore:
https://forums.developer.apple.com/message/234654
Je suis tombé sur ceci: UINavigationItem-Marge.
Il fonctionne comme un charme.
Prises de cette réponse: BarButtons maintenant utiliser la mise en page automatique et nécessitent donc des contraintes.
Objective C
Solution 1:
À la lumière de la Pomme de réponse que ce comportement est normal, nous avons contourné le problème en supprimant la barre d'outils et l'ajout d'un affichage personnalisé.
Je me rends compte que cela peut ne pas être possible dans tous les cas, mais la régularité de UIView est beaucoup plus facile à personnaliser pour l'application de l'apparence de la barre d'outils et la barre de navigation où Apple a le contrôle sur le bouton de positionnement.
Au lieu de mettre notre bouton personnalisé comme la vue personnalisée de l'interface utilisateur bouton de la barre d'objet, il était à nous de le définir comme un sous-vue de la vierge de l'interface utilisateur boutons dans la vue personnalisée.
Faisant cela, nous avons été en mesure de retourner à la même allure de notre ios 10 app
Solution 2:
Un peu brouillon, nous avons clôturé notre coutume bouton de vue en extérieur UIButton donc l'emplacement du cadre peut être réglé. C'est que l'extérieur de la bordure gauche de la touche de l'onu-tappable malheureusement, mais corrige l'apparence de la position du bouton. Voir l'exemple:
L'aide de cette méthode, nous gardons notre barre de navigation et peut positionner le bouton à l'endroit où elle est nécessaire.
Edit: Nous avons trouvé la solution 2 ne fonctionne pas sur ios 10, c'est probablement ce qui affecte uniquement les minuscules pour cent des développeurs forcé d'être rétro-compatible.
Solution 3
Ce que nous étions plus préoccupés par les entrants de l'entassement des boutons a été le fait que le titre de la barre de navigation a couru dans la coutume bouton gauche, la taille des marges a été moins important et utilisé comme un outil pour faire de la place. La solution est de simplement ajouter une entretoise élément à gauche des éléments.
Swift version de thedeveloper3214 personnalisé UINavigationBar sous-classe' layoutSubviews méthode(https://stackoverflow.com/a/46660888/4189037):