I have a problem in my application. I set the icon value on one of the tabs in the UITabBar. The icon icon is correctly red, and the circle around the icon is white. The problem is that the text color is gray (160, 160, 160). This is the same color as the regular text of the tabbaritem, but I have not set this color in the application code, and I do not know where this color comes from. I have been looking for this problem all over the web since weeks, but I cannot find a solution. The only answer I have found everywhere is that it is not possible to change the color of the icon text. But if this is not possible, why has this changed in my application? Hope someone can help me on this ...
Change 11/02/2012 - Code
Creating a TabBarController:
#import "ExtendedTabBarController.h" #import "configuration.h" @implementation ExtendedTabBarController - (void)viewDidLoad { [super viewDidLoad]; [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIColor colorWithRed:207.0/255.0 green:70.0/255.0 blue:61.0/255.0 alpha:1], UITextAttributeTextColor, [UIFont fontWithName:@"KievitPro-Regular" size:10.0], UITextAttributeFont, nil] forState:UIControlStateSelected]; [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1], UITextAttributeTextColor, [UIFont fontWithName:@"KievitPro-Regular" size:10.0], UITextAttributeFont, nil] forState:UIControlStateNormal]; [self.tabBar sizeToFit]; UIView *tabbarBackgroundColorView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0, self.view.bounds.size.width, 49)]; [tabbarBackgroundColorView setBackgroundColor:[UIColor colorWithRed:233.0/255.0 green:233.0/255.0 blue:233.0/255.0 alpha:1]]; [self.tabBar insertSubview:tabbarBackgroundColorView atIndex:0]; } - (void)viewDidUnload { [super viewDidUnload]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return UIInterfaceOrientationIsPortrait(interfaceOrientation);
Call in AppDelegate:
ExtendedTabBarController *tabBarController = [[ExtendedTabBarController alloc] init]; [self setTabBarController:tabBarController]; [[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"menu_bg"]]; // code for initialize View- and NavigationControllers... self.tabBarController.viewControllers = @[highlightsNavigationController, categoryNavigationController, searchNavigationController, favoritesNavigationController, imprintNavigationController]; self.window.rootViewController = self.tabBarController; [[UITabBar appearance] setSelectionIndicatorImage:[[UIImage alloc] init]];
Set the value of the icon:
int viewCount = 0; NSUserDefaults * defs = [NSUserDefaults standardUserDefaults]; NSDictionary * dict = [defs dictionaryRepresentation]; for (id key in dict) { if([key rangeOfString:@"_highlighted"].location != NSNotFound && [[[dict objectForKey:key] objectAtIndex:0] isEqualToString:@"YES"]) { viewCount++; } } UITabBarItem *tbi = (UITabBarItem *)[self.tabBarController.tabBar.items objectAtIndex:3]; if(viewCount <= 0) { tbi.badgeValue = nil; } else { tbi.badgeValue = nil; tbi.badgeValue = [NSString stringWithFormat:@"%d", viewCount]; }
Code for rewritten UILabel:
// -- file: UILabel+VerticalAlign.h #pragma mark VerticalAlign @interface UILabel (VerticalAlign) - (void)alignTop; - (void)alignBottom; - (void)awakeFromNib; -(id)initWithFrame:(CGRect)frame; @end #import "UILabel+VerticalAlign.h" // -- file: UILabel+VerticalAlign.m @implementation UILabel (VerticalAlign) - (void)alignTop { CGSize fontSize = [self.text sizeWithFont:self.font]; double finalHeight = fontSize.height * self.numberOfLines; double finalWidth = self.frame.size.width; //expected width of label CGSize theStringSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode]; int newLinesToPad = (finalHeight - theStringSize.height) / fontSize.height; for(int i=0; i<newLinesToPad; i++) self.text = [self.text stringByAppendingString:@"\n "]; } - (void)alignBottom { CGSize fontSize = [self.text sizeWithFont:self.font]; double finalHeight = fontSize.height * self.numberOfLines; double finalWidth = self.frame.size.width; //expected width of label CGSize theStringSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode]; int newLinesToPad = (finalHeight - theStringSize.height) / fontSize.height; for(int i=0; i<newLinesToPad; i++) self.text = [NSString stringWithFormat:@" \n%@",self.text]; } - (void)awakeFromNib { [super awakeFromNib]; [self setFont:[UIFont fontWithName:@"KievitPro-Regular" size:12.0]]; } -(id)initWithFrame:(CGRect)frame { id result = [super initWithFrame:frame]; if (result) { [self setFont:[UIFont fontWithName:@"KievitPro-Regular" size:12.0]]; } return result; } @end