UITabbarItem BadgeValue Text Color

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); // only portrait orientation } /** * orientation for iOS6 **/ -(NSUInteger)supportedInterfaceOrientations{ return UIInterfaceOrientationMaskPortrait; } @end 

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 
+4
source share
2 answers

I found a solution for my problem myself:

I have to remove the following lines from a rewritten UILabel:

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

Can someone explain to me why these lines change the color of the icon text before we can close this post?

+2
source

Instead of setting the default UILabel font using the category, use the UILabel appearance method to set the font:

 [[UILabel appearance] setFont:[UIFont fontWithName:@"KievitPro-Regular" size:12.0]]; 

When I checked this, the text for the icon appeared as a normal white color.

0
source

Source: https://habr.com/ru/post/1443047/


All Articles