2010-09-11 19 views
9

Tengo un UIViewController configurar para mostrar un botón de información sobre el derecho a su UINavigationItem así:botón de información rightBarButtonItem, ningún espacio a la derecha

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

que funciona perfectamente, pero el único problema es que me quedo con poco o ningún espacio a la derecha del botón, que se parece bastante feo:

Infobutton

¿hay alguna manera para que el botón se mueve alrededor del 5 píxeles desde el lado derecho?

Gracias.

+0

Se ve correctamente espaciado para mí. Mire otras aplicaciones de iPhone que ponen un botón en el lado derecho de una barra de navegación: Mensajes, Calendario, Contactos, Mapas, etc., etc. Están espaciadas de la misma manera. –

+1

Mi cliente quiere que esté más lejos, y este espaciado no se ve bien con un botón de información. – Emil

+0

Uso el mismo botón en una barra de navegación, pero a la izquierda en lugar de a la derecha, usando el espaciado predeterminado. Me parece bien. Si su cliente quiere que sobresalga más, pregunte por qué quieren que su aplicación se vea completamente diferente de todas las otras aplicaciones que usan un botón de información en la barra de navegación. –

Respuesta

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

Intenta configurar infoButton.contentEdgeInsets (o imageEdgeInsets); algo así como

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

No estoy seguro de si funciona para los botones del "sistema", pero podría ser así.

Si eso no funciona, la forma más fácil es, probablemente, pegarlo dentro de una UIView.

EDIT: Presumiblemente, la barra de herramientas llama al [customView sizeThatFits:blah] para averiguar qué tan grande es la vista "quiere ser". Se supone que el código anterior significa "agregar un recuadro derecho de 10 píxeles", que para un botón normal (personalizado) también aumenta el tamaño en 10 píxeles.

Parece que UIButton devuelve un tamaño fijo para el botón de información estándar, ignorando las inserciones. Su código "funciona" al afectar los métodos contentRectForBounds: y imageRectForContentRect: que cambian donde se dibuja el icono, pero en realidad no cambia el tamaño del botón. Sospecho que el ícono está dibujando fuera del botón, lo que puede significar que el rect "táctil" está mal (pero las barras de herramientas parecen aumentar las rectas táctiles para UIBarButtonItems normales, así que tal vez no importe).

+0

¡Hah, eso funcionó! No tengo idea de por qué, pero funcionó. ¿Me importa explicarme? – Emil

+3

EDITAR: Este código no lo hizo todo, tuve que agregar esto: \t 'infoButton.contentEdgeInsets = (UIEdgeInsets) {. Left = -10};' también, o el botón simplemente sería presionado desde la derecha. – Emil

Cuestiones relacionadas