Le changement de position de UIBarButtonItem dans UINavigationBar
Comment puis-je changer la position d'un UIBarButtonItem dans un UINavigationBar? Je voudrais que mon bouton soit sur 5px supérieur à sa position normale.
- Voulez-vous aussi la UINavigation barre derrière lui, ou juste le bouton flottant?
- Pas tout à fait sûr de ce que tu veux dire - je pense que la réponse est que je veux qu'il se comporte exactement comme un normal UIBarButtonItem à l'intérieur d'un UINavigationBar serait. Dites, si c'était le leftBarButtonItem...tout de même, juste 5px plus élevé. Le bouton est à l'aide d'une image personnalisée, ainsi, si c'est pertinent.
- une approche est, il suffit d'utiliser des images à la place. cette "marche toujours", même si c'est une corvée.
InformationsquelleAutor Ben Williams | 2011-04-23
Vous devez vous connecter pour publier un commentaire.
Il n'est pas particulièrement bonne façon de le faire. Votre meilleur pari si vous devez vraiment est à la sous-classe UINavigationBar, et remplacer
layoutSubviews
appeler[super layoutSubviews]
et puis de trouver et de repositionner le bouton de la vue.[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setBackButtonBackgroundVerticalPositionAdjustment:-3 forBarMetrics:UIBarMetricsDefault];
Ce code crée un bouton de retour pour UINavigationBar avec le fond de l'image et de la position personnalisée. L'astuce est de créer un intermédiaire d'afficher et de modifier ses limites.
CGRectOffset
) pour UIButton ne fonctionne pas dans iOS7. UIBarButtonItem semble avoir de position fixe dans iOS7 et le déplacement/la compensation des coordonnées x,y de UIButton ne fonctionne pas. La modification de la largeur et de la hauteur de UIButton fonctionne, mais pas d'impact de changement de coordonnées x,y.UIBarButtonItem
. Il ne annonces complexité et provoque d'autres problèmes comme le taraudage de la zone. Je pense que cette question devrait être ouvert comme une fonctionnalité ou un bug d'apple en question dans les pages de rapports, comme beaucoup de développeurs aimeraient pour ce changement de coordonnées ou d'avoir un peu plus de contrôle sur le boutonJe l'ai résolu en utilisant la transformation et de la vue personnalisée:
(Swift)
Pour ceux d'entre-vous développer pour iOS 5 qui a trébuché à travers ce et ont été découragés... Essayez quelque chose comme ceci:
right
.right
est vraimentitem
Le meilleur moyen est de la sous-classe votre UINavigationBar, comme décrit ici: https://stackoverflow.com/a/17434530/1351190
Voici mon exemple:
Espère que cela aide.
[[navigationItem leftBarButtonItem] customView]
ou[[navigationItem rightBarButtonItem] customView]
et de définir les images directement.D'essayer le code ci-dessous,
Il est utilisé pour changer le " y " de la position dans le présent code. Changer la valeur 'y' (ici, il est -20.0 f) en fonction de votre exigence. Si la valeur est positive, il va vers le bas la position du bouton. Si la valeur est négative, elle sera votre position de bouton.
J'ai besoin de mettre mon bouton pour être plus vers la droite. Voici comment je l'ai fait à l'aide de UIAppearance en Swift. Il y a une position verticale de la propriété il y a ainsi donc, j'imagine que vous pouvez ajuster dans n'importe quelle direction.
Cela semble beaucoup moins invasive pour moi que de jouer avec l'image directement ou l'ajout de sous-vues.
Si vous êtes tout simplement à l'aide d'une image et non PAS la valeur par défaut de chrome, vous pouvez utiliser l'image négative des encarts (définie dans la taille de l'inspecteur) pour déplacer votre image autour de à l'intérieur de la UIBarButtonItem (très pratique car, par défaut, le remplissage horizontal peut entraîner l'image étant plus à l'intérieur que vous voulez). Vous pouvez utiliser l'image encarts de la position de l'image à l'extérieur des limites de la UIBarButtonItem, en tant que bien, et l'ensemble du voisinage de la partie gauche du bouton est tappable, de sorte que vous n'avez pas à vous soucier de s'assurer qu'il est positionné à proximité d'un robinet cible. (au moins, au sein de la raison.)
La meilleure solution que j'ai pu trouver est d'initialiser un UIBarButtonItem avec une sous-vue, qui comprend un espace supplémentaire vers la gauche/droite. De cette façon, vous n'aurez pas à vous soucier de sous-classement, et de changer la disposition des éléments à l'intérieur de la barre de navigation, tels que le titre.
Par exemple, pour déplacer un bouton de 14 points pour le gauche:
Étape 1:
Titre du jeu en position à l'aide de l'Apparence de l'API. Par exemple, dans AppDelegate de didFinishLaunchingWithOptions
Étape 2:
Sous-Classe UINavigationBar
Comme @Anomie dit, nous avons besoin de sous-classe
UINavigationBar
, et remplacerlayoutSubviews()
.Cette place tous les à droite le bouton de barre d'éléments fermement attaché à le côté droit de la barre de navigation (plutôt que d'être légèrement à gauche ajusté par défaut):
Le seul endroit pour mettre la UINavigationBar propriété de UINavigationController est dans init(), comme ceci:
La deuxième ligne définit la vue de la racine contrôleur de UINavigationController.
(Car on ne peut pas lui via
init(rootViewController:)
UIApplication.sharedApplication().windows.last!.bounds.size.width
.Swift 3.1
Voici Adriano solution à l'aide de Swift 3. C'était la seule solution qui a fonctionné pour moi et j'en ai essayé plusieurs.
Dans mon cas
changement barbuttonItem du cadre de personnaliser les espaces
Ajouter, Supprimer barButtonItems de façon dynamique.
changement de teinte des couleurs par tableview de contentOffset.y
comme ceci
Si votre objectif minimum est de iOS 11, vous pouvez modifier la barButton images dans le viewDidLayoutSubviews
Mais, c'est Seulement travaillé sur iOS 11.
J'ai aussi essayé d'utiliser le fixedSpace. Mais Il n'a pas de travail dans plusieurs navigationBarButton éléments.
Ainsi, j'ai changé customView de la largeur de régler l'espace horizontal.
C'est l'un de mes barButtonItem classe
C'est le résultat.
J'ai testé sur iOS 9 ~ 11, (Swift 4)
Init
UIBarButtonItem
avec vue personnalisée et de la surchargelayoutSubviews
dans la vue personnalisée, à l'instar de ceVous pouvez toujours faire des ajustements à l'aide des Encarts sur le bouton. Par exemple,
Cela fonctionne pour moi.
Voici une solution simple qui a été suffisant pour mes besoins. J'ai ajouté un bouton d'info sur le côté droit de la UINavigationBar, mais par défaut, il se trouve trop près du bord. Par l'extension de la largeur de l'image, j'ai été en mesure de créer de l'espace supplémentaire nécessaire sur la droite.
J'ai trouvé la solution de ce problème en faisant de l'ajustement de l'bords de l'Image, les Encarts du bouton personnalisé. J'ai eu l'exigence dans l'application pour augmenter la hauteur de la barre de navigation et après l'augmentation de la hauteur rend le rightBarButtonItem et leftBarButtonItem images unpositioned problème.
Trouver le code ci-dessous:-
Espère que cela aide quelqu'un.
Transformation Affine pouvez faire ce que vous avez besoin. Dans mon cas, le concepteur m'a donné 16x16 icône de fermeture et que je veux créer 44x44 appuyez sur la zone.
Barre de Navigation à l'aide de changement à gauche de la barre de position et des bords de l'image encarts
swift 4