iOS:Tabbar色调颜色

时间:2014-03-26 14:34:35

标签: ios7 uitabbarcontroller xcode5 tintcolor

我在代码中创建一个TabBar:

self = [super init];

    self.tabBarController = [[UITabBarController alloc]init];
    self.tabBarController.delegate = self;
    self.tabBarController.navigationController.delegate = self;

    //Build Model
    NSArray *topLevelControllers = [self buildTopLevelControllers];
    [self.tabBarController setViewControllers:topLevelControllers animated:NO];

    //Inbox will be lead navigation
    self.tabBarController.selectedIndex = kSelectedIndex;

    [self.view addSubview:self.tabBarController.view];
    self.tabBarController.customizableViewControllers = @[];


    return self;
}

在App Delegate中,我有以下Tint代码:

[[UIView appearance] setTintColor:[ColorUtils globalTintColor]];

问题:当应用启动时,标签栏中的所有图标都会使用全局颜色进行着色。当我选择一个然后取消选择它们时,它们将返回到灰色(图像默认颜色)。

所需结果:应用启动时,所有按钮均为灰色(灰色是PNG中的图像颜色)。当我点击标签栏图标时,颜色会变为全局色调颜色。

尝试:在App委托中,我添加了以下代码,但它不起作用:

TabBarVC *tabBarVC = [[TabBarVC alloc]init];
tabBarVC.tabBarController.tabBar.tintColor = [UIColor greyColor];
tabBarVC.tabBarController.tabBar.selectedImageTintColor = [STColorUtils globalTintColor];

[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [ColorUtils globalTintColor]}];


[[UIView appearance] setTintColor:[ColorUtils globalTintColor]];
[self.window setRootViewController:tabBarVC];

但是,如果我发表评论:

//[[UIView appearance] setTintColor:[ColorUtils globalTintColor]];

图标显示为灰色,但全局色调颜色为iOS7默认值:蓝色。

3 个答案:

答案 0 :(得分:3)

iOS 7中的selectedImageTintColor存在一个已知问题。我检查过这个问题尚未解决。所以删除 -

tabBarVC.tabBarController.tabBar.selectedImageTintColor = [STColorUtils globalTintColor];

你也想使用UITabBar的外观,所以替换

[[UIView appearance] setTintColor:[ColorUtils globalTintColor]];

[[UITabBar appearance] setTintColor:[ColorUtils globalTintColor]];

答案 1 :(得分:2)

这是迄今为止我发现的最佳解决方案:

[UIView appearance].tintColor = [UIColor redColor];

// the selected image and text will still use UIView.tintColor. 
// this is to tint the unselected images until they are tapped
// [UIColor grayColor] does not exactly match the default color, but it's subtle
[UIView appearanceWhenContainedIn:[UITabBar class], nil].tintColor = [UIColor grayColor];

使用swift时我需要创建一个包含+(UIView *)viewAppearanceWhenContainedInTabBar()方法的objective-c文件来使用[UIView appearanceWhenContainedIn:]方法,因为它不适用于swift :(

答案 2 :(得分:1)

更改UIWindow的tintColor属性。它应用于添加到此窗口的每个UIView。