2010-09-11 33 views
9

J'ai un UIViewController mis en place pour afficher une info-bouton à droite dans son UINavigationItem comme celui-ci:bouton Info rightBarButtonItem, pas d'espace à droite

UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight]; 
[infoButton addTarget:self action:@selector(toggleAboutView) forControlEvents:UIControlEventTouchUpInside]; 
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:infoButton] autorelease]; 

Cela fonctionne parfaitement, mais le seul problème est que Je suis parti avec peu ou pas d'espace à droite du bouton, ce qui semble assez laid:

Infobutton

Est-il possible pour le bouton pour passer environ 5 px à partir du côté droit?

Merci.

+0

Il semble correctement espacé de moi. Regardez les autres applications iPhone qui mettent un bouton sur le côté droit d'une barre de navigation: Messages, Calendrier, Contacts, Cartes, etc., etc. Ils sont tous espacés de la même manière. –

+1

Mon client veut que ce soit plus loin, et cet espacement ne semble pas bien avec un bouton d'information. – Emil

+0

J'utilise le même bouton sur une barre de navigation, mais sur la gauche au lieu de la droite, en utilisant l'espacement par défaut. ça à l'air bien pour moi. Si votre client le souhaite plus, demandez-lui pourquoi il souhaite que son application soit totalement différente de toutes les autres applications utilisant un bouton d'info dans la barre de navigation. –

Répondre

17
infoButton.contentEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 10); 
14

Essayez de définir infoButton.contentEdgeInsets (ou imageEdgeInsets); quelque chose comme

infoButton.contentEdgeInsets = (UIEdgeInsets){.right=10}; 

Je ne suis pas sûr si cela fonctionne pour les boutons "système", mais il pourrait.

Si cela ne fonctionne pas, le plus simple est probablement de le coller dans un UIView.

EDIT: Il est probable que la barre d'outils appelle [customView sizeThatFits:blah] pour déterminer la taille de la vue "veut être". Le code ci-dessus est censé signifier "ajouter un insert de bord droit de 10 pixels", ce qui, pour un bouton normal (personnalisé), augmente également la taille de 10 pixels.

Il semble que UIButton renvoie une taille fixe pour le bouton d'informations standard, en ignorant les encarts. Votre code "fonctionne" en affectant les méthodes contentRectForBounds: et imageRectForContentRect:, qui change l'endroit où l'icône est dessinée, mais ne change pas réellement la taille du bouton. Je suspecte que l'icône dessine à l'extérieur du bouton, ce qui peut signifier que le rect "touchable" est faux (mais les barres d'outils semblent augmenter les rects tactiles pour les UIBarButtonItems normaux, donc peut-être que cela n'a pas d'importance).

+0

Hah, ça a marché! Je n'ai aucune idée de pourquoi, mais ça a marché. Tu veux m'expliquer? – Emil

+3

EDIT: Ce code n'a pas tout fait, je devais ajouter ceci: \t 'infoButton.contentEdgeInsets = (UIEdgeInsets) {. Left = -10};' aussi, ou le bouton serait juste pressé de la droite. – Emil