custom color bar iphone uitableview iphone-sdk-3.0 uiimageview uinavigationbar

iphone - color - navigation bar swift 4



Agregar imagen a la barra de navegaciĆ³n (9)

Agregar código en appdelegate terminó con el método de lanzamiento

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0] if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0) { [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigation_or.png"] forBarMetrics:UIBarMetricsDefault]; [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:0.0 forBarMetrics:UIBarMetricsDefault]; } else { [[UINavigationBar appearance] setBarTintColor:UIColorFromRGB(0x067AB5)]; [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; // Uncomment to assign a custom backgroung image [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigation_or.png"] forBarMetrics:UIBarMetricsDefault]; // Uncomment to change the back indicator image [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]]; [[UINavigationBar appearance] setBackgroundColor:[UIColor whiteColor]]; [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@""]]; // Uncomment to change the font style of the title NSShadow *shadow = [[NSShadow alloc] init]; shadow.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8]; shadow.shadowOffset = CGSizeMake(0, 0); [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], NSForegroundColorAttributeName,shadow, NSShadowAttributeName,[UIFont fontWithName:@"HelveticaNeue-Bold" size:17], NSFontAttributeName, nil]]; [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:0.0 forBarMetrics:UIBarMetricsDefault]; }

Me gustaría que una imagen ocupe toda la barra de navegación. Esta es la navegación que viene con una aplicación basada en la navegación. Aparece en RootViewController con el UITableView que lo acompaña. He visto algunos ejemplos de cómo esto podría funcionar.

Establecer el título de la barra de navegación:

UIImage *image = [UIImage imageNamed:@"TableviewCellLightBlue.png"]; UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; [self.navigationController.navigationBar.topItem setTitleView:imageView];

El problema es que solo cubre el título en lugar de toda la barra de navegación.

También hay este hilo: http://discussions.apple.com/message.jspa?messageID=9254241#9254241 . Hacia el final, la solución parece usar una barra de pestañas, que no estoy usando. ¿Es tan complicado establecer un fondo de barra de navegación? ¿Hay alguna otra técnica más simple?

Me gustaría tener un fondo para la navegación y aún poder usar el texto del título.


En realidad, hay una forma mucho más sencilla de agregar una imagen de fondo a cualquier clase o subclase de UIView . No requiere categorización de clase o extensión (subclases), y puede hacer esto "según sea necesario". Por ejemplo, para agregar una imagen de fondo a la barra de navegación de un controlador de vista, haga lo siguiente:

self.navigationController.navigationBar.layer.contents = (id)[UIImage imageNamed:@"background.png"].CGImage;

Tendrá que recordar agregar el marco de Quartz Core a su proyecto y agregar #import <QuartzCore/QuartzCore.h> donde sea que necesite hacer esto. Esta es una manera mucho más limpia y simple de alterar la capa de dibujo de cualquier cosa que herede de UIView . Por supuesto, si desea lograr un efecto similar para todas las barras de navegación o tabuladores, entonces la creación de subclases tiene sentido.


En su caso, esta solución encontrada en otra respuesta funcionaría bien.

Con la categoría "Imagen personalizada" agregada a UINavigationBar, puede simplemente llamar:

UINavigationBar *navBar = self.navigationController.navigationBar; UIImage *image = [UIImage imageNamed:@"yourNavBarBackground.png"]; [navBar setBackgroundImage:image];

Este código debe ir en el método

- (void)viewWillAppear:(BOOL)animated

del controlador de vista donde desea tener la imagen personalizada. Y, en ese caso, debería llamar mejor:

[navBar clearBackgroundImage]; // Clear any previously added background image

before setBackgroundImage (de lo contrario, se agregará varias veces ...)


Solo agregue esta línea.

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"NavBar.png"] forBarMetrics:UIBarMetricsDefault];

Bam! Una línea y hecho.


Utilicé la solución de cmp y agregué un poco de lógica para eliminarla, ya que solo quería que apareciera una imagen de fondo personalizada en la pantalla de inicio dentro de la vista.

HomeViewController.m

UIImage *image = [UIImage imageNamed:@"HomeTitleBG.png"]; UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; imageView.tag = 10; UIImageView *testImgView = (UIImageView *)[self.navigationController.navigationBar viewWithTag:10]; if ( testImgView != nil ) { NSLog(@"%s yes there is a bg image so remove it then add it so it doesn''t double it", __FUNCTION__); [testImgView removeFromSuperview]; } else { NSLog(@"%s no there isn''t a bg image so add it ", __FUNCTION__); } [self.navigationController.navigationBar addSubview:imageView]; [imageView release];

También traté de usar el método clearBackgroundImage sugerido, pero no pude hacerlo funcionar, así que le di una etiqueta a la imagen y luego la eliminé en los demás controles de vista que aparecerán en la vista.

OtherViewController.m

UIImageView *testImgView = (UIImageView *)[self.navigationController.navigationBar viewWithTag:10]; if ( testImgView != nil ) { NSLog(@"%s yes there is a bg image so remove it", __FUNCTION__); [testImgView removeFromSuperview]; }

`


cambió para ios6, para que funcione en ios 6 use:

UINavigationBar *navBar = self.navigationController.navigationBar; UIImage *image = [UIImage imageNamed:@"image.png"]; [navBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];


simplemente vaya al controlador de vista y pegue en superaddload y reemplace su imagen en mainlogo y luego configure el título de navegación en establecer su logotipo de imagen

- (void)viewDidLoad { [super viewDidLoad]; //set your image frame UIImageView *image=[[UIImageView alloc]initWithFrame:CGRectMake(0,0,70,45)] ; //set your image logo replace to the main-logo [image setImage:[UIImage imageNamed:@"main-logo"]]; [self.navigationController.navigationBar.topItem setTitleView:image]; }


UIImage *image = [UIImage imageNamed:@"YourImage.png"]; UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; [self.navigationController.navigationBar addSubview:imageView];


UIImage *logo = [UIImage imageNamed:@"my_logo"]; UIImageView *logoView = [[UIImageView alloc]initWithImage:logo]; logoView.frame = CGRectMake(0, 0, 320, 37); UINavigationController *searchNavCtrl = [[UINavigationController alloc] initWithRootViewController:searchViewController]; searchNavCtrl.navigationBar.barStyle = UIBarStyleBlack; //searchNavCtrl.navigationItem.titleView = logoView; //[searchNavCtrl.navigationController.navigationBar.topItem setTitleView:logoView]; [searchNavCtrl.navigationBar addSubview:logoView]; [logoView release];