ios background uinavigationbar updates uiappearance

ios - Actualizando la barra de navegación después de un cambio usando UIAppearance



background uinavigationbar (3)

Actualmente estoy personalizando la imagen de fondo de la barra de navegación de mi aplicación iOS utilizando el proxy UIAppearance. Hay un botón para cambiar entre dos modos diferentes que desencadena una notificación. Esta notificación cambiará el fondo de una imagen diferente utilizando nuevamente el proxy. Mi problema es que este cambio se vuelve visible solo cuando voy a un controlador diferente y vuelvo a él. No puedo forzar la actualización de la barra de navegación dentro del controlador.

Lo he intentado en mi MainTabBarController:

- (void) onAppChangedMode: (NSNotification*)notif { APP_MODE mode = (APP_MODE) [[notif object] integerValue]; // change navigation bar appearance [[UILabel appearance] setHighlightedTextColor:[UIColor redColor]]; [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:(mode == 0 ? @"navbar.png" : @"navbar2.png")] forBarMetrics:UIBarMetricsDefault]; // trying to update for (UIViewController* vc in self.viewControllers) { [vc.navigationController.navigationBar setNeedsDisplay]; } }

pero nada ... no está funcionando. ¿Alguna idea de cómo lograrlo?

¡Gracias!


Simplemente elimine las vistas de Windows y agréguelas de nuevo:

for (UIWindow *window in [UIApplication sharedApplication].windows) { for (UIView *view in window.subviews) { [view removeFromSuperview]; [window addSubview:view]; } }


Pruebe este código para cambiar la imagen de fondo de la barra de navegación actual solamente :

[self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];

Use el código anterior después de cambiar el UIAppearance. Esto forzará un cambio en la barra de navegación del controlador actual. Las barras de navegación para los otros controladores serán manejadas por el cambio en UIAppearance.


Solo tengo el mismo problema, este código te ayudará a:

- (IBAction)btnTouched:(id)sender { [[UADSwitch appearance]setOnTintColor:[UIColor redColor]]; // Present a temp UIViewController UIViewController *vc = [[UIViewController alloc]init]; [self presentViewController:vc animated:NO completion:nil];//"self" is an instance of UIViewController [vc dismissViewControllerAnimated:NO completion:nil]; }