objective-c – UITabbarItem BadgeValue文本颜色
发布时间:2020-12-16 07:33:07 所属栏目:百科 来源:网络整理
导读:我的应用程序中存在问题.我在UITabBar的其中一个标签上设置了徽章值.徽章值正确为红色,徽章值周围的圆圈正确为白色.问题是,文本的颜色是灰色的(160,160,160).它与普通状态tabbaritem文本的颜色相同,但我在应用程序代码中没有设置此颜色,我不知道这种颜色来自
我的应用程序中存在问题.我在UITabBar的其中一个标签上设置了徽章值.徽章值正确为红色,徽章值周围的圆圈正确为白色.问题是,文本的颜色是灰色的(160,160,160).它与普通状态tabbaritem文本的颜色相同,但我在应用程序代码中没有设置此颜色,我不知道这种颜色来自何处.
几个星期以来,我在整个网络中搜索了这个问题,但我找不到任何解决方案.我到处找到的唯一答案是,无法更改徽章值文本的颜色.但如果不可能,为什么我的应用程序会改变它? 我希望,有人可以帮我解决这个问题…… > http://www.luventas-webdesign.de/stackoverflow/screenshot_badgevalue.png 编辑02.11.2012 – 代码 创建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],nil] forState:UIControlStateNormal]; [self.tabBar sizeToFit]; UIView *tabbarBackgroundColorView = [[UIView alloc] initWithFrame:CGRectMake(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 在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]]; 设置徽章值: 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]; } 覆盖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 解决方法
我自己找到了解决问题的方法:
我必须从覆盖的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; } 也许有人可以解释我,为什么这条线会改变徽章价值的文字颜色,然后才能关闭这个帖子? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |