2011-05-29 29 views
10

Estoy creando una aplicación con una barra de navegación personalizada. Después de algunas investigaciones, decidí hacer esto usando una categoría en UINavigationBar. La barra de navegación debe ser un poco más grande de lo normal para acomodar una sombra paralela. Aquí está el código:iOS: Posicionamiento de los botones de la barra de navegación dentro de la barra de navegación personalizada

#import "UINavigationBar+CustomWithShadow.h" 

@implementation UINavigationBar (CustomWithShadow) 

- (void)drawRect:(CGRect)rect { 

    // Change the tint color in order to change color of buttons 
    UIColor *color = [UIColor colorWithHue:0.0 saturation:0.0 brightness:0.0 alpha:0.0]; 
    self.tintColor = color; 

    // Add a custom background image to the navigation bar 
    UIImage *image = [UIImage imageNamed:@"NavBar.png"]; 
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, 60)]; 
} 

- (void)layoutSubviews { 

    self.frame = CGRectMake(0, 20, self.frame.size.width, 60); 
} 
@end 

El único problema ahora es que la barra de navegación más grande significa que los botones de la barra de navegación terminan demasiado lejos, así:

enter image description here

¿alguien sabe cómo Puedo corregir la posición de los botones?

¡Gracias por toda ayuda!

Actualización:

que añadir los botones de la barra de navegación en el método init del controlador de vista de este modo:

// Create "Add" button for the nav bar 
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] 
    initWithBarButtonSystemItem:UIBarButtonSystemItemAdd 
    target:self 
    action:@selector(createNewEntry:)]; 
[[self navigationItem] setRightBarButtonItem:addButton]; 
[addButton release]; 
+0

¿Cómo se agrega el 'UIBarButtonItem' a la barra? ¿Y donde? Hice una pequeña prueba en la que agregué los btns mediante NIB y todo parece estar bien. –

+0

Los agrego en el método init del controlador de vista, usando '[[self navigationItem] setRightBarButtonItem: addButton];' por ejemplo. ¿Cómo puedo agregar los botones a través de NIB? –

Respuesta

3

Tendrá que añadir el leftBarButtonItem y rightBarButtonItem como la costumbre artículos y desorden con los marcos .... por ejemplo:

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0,5,buttonImage.size.width,buttonImage.size.height)]; 
[button setBackgroundImage:buttonImage forState:UIControlStateNormal]; 
[button addTarget:delegate action:@selector(barButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
[button setTitle:titleString forState:UIControlStateNormal]; 
[button setTitleColor:CUSTOM_BAR_BUTTON_TITLE_COLOR forState:UIControlStateNormal]; 
[[button titleLabel] setFont:[UIFont boldSystemFontOfSize:14]]; 
[[button titleLabel] setShadowColor:CUSTOM_BAR_BUTTON_SHADOW_COLOR]; 
[[button titleLabel] setShadowOffset:CGSizeMake(0,-1)]; 

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button]; 
[button release]; 

[[self navigationItem] setRightBarButtonItem:barButton]; 
[barButton release]; 
+0

¿Hay una manera más simple? Tengo botones en vistas posteriores y me gustaría evitar agregar cada uno de ellos como un elemento personalizado si es posible. Siéntase libre de sugerir alternativas a la forma en que agregué la sombra paralela a la barra de navegación si tiene :) –

+0

@Erik Deberá usar un elemento de barra de vista personalizado tomando el botón real como una subvista para corregir dicho desplazamiento cuestiones. – Till

+0

Una forma más sencilla de lograr esto en todos los botones de navegación sería crear una subclase o categoría de UINavigationBarButton. – adam

0

Trate de añadir los botones de la barra de navegación en elmétodo del controlador de vista en su lugar.

+0

Sin cambios, me temo. Los botones continúan alineándose en la parte inferior de la barra de navegación (que baja hasta el final de la sombra paralela). –

0

Mi solución, no es la mejor, pero me funciona bien. Mi barra de navegación personalizada tiene una altura de 55 (la altura predeterminada es 44). Corté de mi barra de navegación personalizada solo 44 de altura e lo inserté en la barra de navegación. Luego corté la siguiente parte de mi barra de navegación personalizada (sombras, etc.) y la inserté como vista de imagen debajo de la barra de navegación. Y eso es. Los botones están en los lugares correctos ...

Cuestiones relacionadas