如何实时更新 UITabBarController 外观?

Posted

技术标签:

【中文标题】如何实时更新 UITabBarController 外观?【英文标题】:How i can update UITabBarController Appearance in real time? 【发布时间】:2016-06-09 08:20:23 【问题描述】:

我无法通过按下 UIButton 来更新 UIBarTintColor,它不起作用。这是我的层次结构:

AppDelegate > HomeViewController (that holds my tabBarController) > ChildViewController

我想通过按下 ChildViewController 内的按钮来实时更改 UiTabbarController 颜色。这是我使用的代码:

UIColor* blu = [UIColor colorWithRed: 0.0/255 green: 161.0/255 blue: 223.0/255 alpha: 1];
[[UIView appearance] setTintColor:blu];
[[UITabBar appearance] setTintColor:blu];
[[UISlider appearance] setTintColor:blu];
[[UINavigationBar appearance] setTintColor:blu];

它不会实时改变我的标签栏的颜色,只有当我在标签栏的初始化期间使用它时才会改变颜色。我已经搜索并尝试了不同的解决方案:

[self.tabBarController.tabBar setHidden:YES];
[self.tabBarController.tabBar setHidden:NO];

在我的情况下不起作用

CALayer *layer2 =  self.tabBarController.view.layer;
[layer2 setNeedsDisplay];
[layer2 displayIfNeeded];

在我的情况下不起作用

setNeedsStatusBarAppearanceUpdate

在我的情况下不起作用。

我还尝试在 appDelegate 中创建一个方法来包含所有这些尝试,我必须从 ChildViewController 尝试此方法,而不是直接调用代码。结果是一样的。 如何通过按按钮刷新 uitabbar 并更改颜色?

【问题讨论】:

【参考方案1】:

试试下面的代码

UIColor* blu = [UIColor colorWithRed: 0.0/255 green: 161.0/255 blue: 223.0/255 alpha: 1];

[self.tabBarController.tabBar setTintColor:blu];

【讨论】:

它的工作原理是这样的:[self.tabBarController.tabBar setTintColor:blu];【参考方案2】:

一旦尝试将其放在主线程上,例如,

dispatch_async(dispatch_get_main_queue(), ^
    UIColor* blu = [UIColor colorWithRed: 0.0/255 green: 161.0/255 blue: 223.0/255 alpha: 1];
    [[UIView appearance] setTintColor:blu];
    [[UITabBar appearance] setTintColor:blu];
    [[UISlider appearance] setTintColor:blu];
    [[UINavigationBar appearance] setTintColor:blu];
);

【讨论】:

刚试过,在childviewcontroller e appdelegate中,不工作

以上是关于如何实时更新 UITabBarController 外观?的主要内容,如果未能解决你的问题,请参考以下文章

如何更新 UITabbarController 中的默认徽章 UI 外观?

从 NSObject 类更新 UITabBarController 栏项目

更新 UITabBarController 的所有视图控制器

如何使屏幕仅垂直。 (UITabBarController/Swift)

如何获取现有的 UITabBarController 实例?

UITabBarController的使用