微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – 使用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];
}

}

但没什么……它不起作用.任何想法如何实现它?

谢谢!

解决方法

尝试使用此代码仅更改当前导航栏的背景图像:
[self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];

更改UIAppearance后使用上面的代码.这将强制更改当前控制器的导航栏.其他控制器的导航栏将由UIAppearance的更改处理.

原文地址:https://www.jb51.cc/iOS/332949.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐