2011-06-15 16 views
8

Tome una mirada en el iPhone Droplr aplicación:Permitir que un UIBarButtonItem tocar arriba & de UINavigationBar

enter image description here

Observe cómo los UIBarButtonItem s son capaces de tocar la derecha, izquierda, arriba y abajo de la pantalla/barra de navegación?

¿Cómo puedo lograr algo similar? He aquí cómo hago un UIBarButton muestra y configurarlo para que se el artículo correcto:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[button setImage:image forState:UIControlStateNormal];  
button.frame= CGRectMake(0.0, 0.0, image.size.width, image.size.height); 
[button addTarget:self action:action forControlEvents:UIControlEventTouchUpInside]; 
UIBarButtonItem *bb = [[[UIBarButtonItem alloc] initWithCustomView:button]autorelease]; 
[self.navigationItem setRightBarButtonItem:bb animated:YES]; 

Sin embargo, es no alineado a la derecha, y tiene un poco de margen de la & parte superior de la parte inferior. El tamaño de mi imagen es correcto (44px), y parece que se encoge para ajustarse a un tipo de cuadro.

Entonces, ¿cómo puedo hacer esto?


Editar: Vaya, el espacio superior/inferior fue mi culpa. Sin embargo, no puedo entender cómo alinear el botón de la barra al ras con el lado izquierdo/derecho. Esto es lo que quiero decir: (lo siento por el botón feo, que era sólo una prueba)

enter image description here

I intentado fijar los insertos de imagen, pero no parece hacer nada.

Respuesta

11
UIView *rightview = [[UIView alloc] initWithFrame:CGRectMake(0,0,30,30)]; 



UIButton *searchbutton = [[UIButton alloc] initWithFrame:CGRectMake(2,2,50, 30)]; 
[searchbutton setImage:[UIImage imageNamed:@"some-pic.png"] forState: UIControlStateNormal]; 
[rightview addSubview:searchbutton]; 


UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithCustomView:rightview]; 
self.navigationItem.rightBarButtonItem = customItem; 
[customItem release]; 

Utilizo una vista personalizada para el elemento de barra derecho y lo alineé a la derecha. Simplemente intente un poco con CGRectMake-Numbers para la coordenada x, para probar Agregué a números altos ...

+0

Funcionó muy bien, gracias! –

+2

Por lo tanto, esencialmente anida las vistas y desplaza la vista interior para 'compensar' el margen. La vista que contiene debe establecerse en clipsToBounds = NO, pero supongo que es el valor predeterminado? –

+0

Esta técnica también funciona para superar el 'ancho máximo impuesto' de la vista del título: descubrí que, cuando hay elementos tanto derechos como izquierdos, la vista del título está limitada a 132 puntos de ancho. El uso de una vista de imagen dentro de una vista lo solucionó. –

Cuestiones relacionadas