我目前正在使用 UIAppearance 代理自定义我的 iOS 应用程序的导航栏背景图像。有一个用于在触发通知的两种不同模式之间切换的按钮。此通知将再次使用代理将背景更改为不同的图像。我的问题是,只有当我转到另一个控制器并返回它时,这种变化才会变得可见。我无法强制更新控制器内的导航栏。
我在我的 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];
}
}
但什么都没有......它不起作用。知道如何实现吗?
谢谢!