Imagen de background de UITabBar personalizada que no funciona en iOS 5 y posterior

Tengo un código simple que coloca una image de background en el tabBar.

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tabBG.png"]]; [self.tabBarController.tabBar insertSubview:imageView atIndex:0]; [imageView release]; 

Esto funciona bien en iOS 4 pero cuando se testing en iOS 5, no funciona.

Estoy tratando de hacer lo siguiente:

 UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tabBG.png"]]; NSString *reqSysVer = @"4.3"; NSString *iOSVersion = [[UIDevice currentDevice] systemVersion]; if ([iOSVersion compare:reqSysVer options:NSNumericSearch] !=NSOrdenetworkingDescending) { // code for iOS 4.3 or below [self.tabBarController.tabBar insertSubView:imageView atIndex:0]; } else { // code for iOS 5 [self.tabBarController.tabBar insertSubView:imageView atIndex:1]; } [imageView release]; 

Por desgracia, esto no funciona … ¿Alguien puede ofrecer una solución?

iOS5 ofrece el proxy UIAppearance.

Además, es una buena práctica cambiar su código en function de la capacidad (en este caso responde a ToSelector) en lugar de a la versión de iOS; esa es una suposition frágil (quién dice que no cambiará en el futuro).

Puede configurarlo solo para esa instancia o globalmente para todas las barras de tabs:

 // not supported on iOS4 UITabBar *tabBar = [tabController tabBar]; if ([tabBar respondsToSelector:@selector(setBackgroundImage:)]) { // set it just for this instance [tabBar setBackgroundImage:[UIImage imageNamed:@"tabbar_brn.jpg"]]; // set for all // [[UITabBar appearance] setBackgroundImage: ... } else { // ios 4 code here } 
 //---- For providing background image to tabbar UITabBar *tabBar = [tabBarController tabBar]; if ([tabBar respondsToSelector:@selector(setBackgroundImage:)]) { // ios 5 code here [tabBar setBackgroundImage:[UIImage imageNamed:@"PB_MD_footer_navBg_v2.png"]]; } else { // ios 4 code here CGRect frame = CGRectMake(0, 0, 480, 49); UIView *tabbg_view = [[UIView alloc] initWithFrame:frame]; UIImage *tabbag_image = [UIImage imageNamed:@"PB_MD_footer_navBg_v2.png"]; UIColor *tabbg_color = [[UIColor alloc] initWithPatternImage:tabbag_image]; tabbg_view.backgroundColor = tabbg_color; [tabBar insertSubview:tabbg_view atIndex:0]; } 

Después de revisar varios artículos, encontré la respuesta para cualquiera que tenga el mismo problema:

 UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tabBG.png"]]; if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9) { //iOS 5 [self.tabBarController.tabBar insertSubview:imageView atIndex:1]; } else { //iOS 4.whatever and below [self.tabBarController.tabBar insertSubview:imageView atIndex:0]; } [imageView release]; 

¡Funciona de maravilla! Disfrutar.

Me doy count de que esto ha sido resuelto, estoy publicando esto para otros que tuvieron el mismo problema que yo. Quería agregar una image de background a la pestaña seleccionada en una barra de tabs. Aquí está la solución:

 [[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"tabbar.png"]]; [[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"tabbar-item.png"]]; 

La segunda línea aquí agrega una image de background a la pestaña seleccionada en una barra de tabs.

Hay algo nuevo en iOS 5 forBarMetrics:UIBarMetricsDefault

Aquí está la manzana doc sobre eso

[[UINavigationBar appearance] setBackgroundImage:toolBarIMG forBarMetrics:UIBarMetricsDefault];