iphone - transparente - diseño visual de una app
iOS: Posicionamiento de los botones de la barra de navegación dentro de la barra de navegación personalizada (3)
Estoy construyendo 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:
#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 abajo, así:
¿Alguien sabe cómo puedo corregir la posición de los botones?
Gracias por toda la ayuda!
Actualizar:
Agregué los botones a la barra de navegación en el método init del controlador de vista de esta manera:
// Create "Add" button for the nav bar
UIBarButtonItem *addButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
target:self
action:@selector(createNewEntry:)];
[[self navigationItem] setRightBarButtonItem:addButton];
[addButton release];
Intente agregar los botones a la barra de navegación en el método viewDidLoad
del controlador de vista en su lugar.
Tendrá que agregar LeftBarButtonItem y rightBarButtonItem como elementos personalizados y meterse 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];
Mi solución, no 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 ...