使用UIAppearance更新更改后的导航栏



我目前正在使用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];
}
}

但什么都没有。。。它不起作用。知道如何实现吗?

谢谢!

只需从窗口中删除视图并重新添加即可:

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

我只是遇到了同样的问题,这段代码将帮助您:

- (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];
}

尝试此代码仅更改当前导航栏的背景图像

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

更改UIAppearance后使用以上代码。这将强制更改当前控制器的导航栏。其他控制器的导航栏将通过UIAppearance中的更改进行处理。

相关内容

  • 没有找到相关文章

最新更新