@implementation UITabBarItem (badgeColor)
- (void)my_setBadgeValue:(NSString *)badgeValue {
[self setBadgeValue:badgeValue];
UIColor *badgeColor = UIColorFromRGB(0x39E2C6);
if (@available(iOS 10.0, *)) {
[self setBadgeColor:badgeColor];
} else {
// 这里替换角标颜色的图片,需要注意的时:这个图片size=(36px,36px),圆的
UIImage *badgeImage = [UIImage imageNamed:@"tabbarItem_blueBadge_icon"];
[self customBadgeColorWith:badgeImage];
}
}
- (void)customBadgeColorWith:(UIImage *)badgeImage {
UIView *tabBarButton = (UIView *)[self performSelector:@selector(view)];
// iOS10以下的版本 角标其实是一张图片,所以我们一直找下去这个图片,然后替换他
for(UIView *subview in tabBarButton.subviews) {
NSString *classString = NSStringFromClass([subview class]);
if([classString rangeOfString:@"UIBadgeView"].location != NSNotFound) {
for(UIView *badgeSubview in subview.subviews) {
NSString *badgeSubviewClassString = NSStringFromClass([badgeSubview class]);
if([badgeSubviewClassString rangeOfString:@"BadgeBackground"].location != NSNotFound) {
[badgeSubview setValue:badgeImage forKey:@"image"];
}
}
}
}
}
@end
以上代码是在iOS13之前设置的。
iOS13以后适配tabbar(去黑线),以下代码
if (@available(iOS 13.0, *)) {
UITabBarAppearance *appearanceBar = [self.tabBar standardAppearance].copy;
appearanceBar.backgroundImage = [UIImage instantiate1x1ImageWithColor:[UIColor whiteColor]];
appearanceBar.shadowImage = [UIImage instantiate1x1ImageWithColor:[UIColor clearColor]];
self.tabBar.standardAppearance = appearanceBar;
NSMutableParagraphStyle *par = [[NSMutableParagraphStyle alloc]init];
par.alignment = NSTextAlignmentCenter;
UITabBarItemStateAppearance *normal = appearanceBar.stackedLayoutAppearance.normal;
if (normal) {
normal.titleTextAttributes = @{NSForegroundColorAttributeName:UIColorFromRGB(0x333333),NSParagraphStyleAttributeName : par};
}
UITabBarItemStateAppearance *selected = appearanceBar.stackedLayoutAppearance.selected; if (selected) {
selected.titleTextAttributes = @{NSForegroundColorAttributeName:UIColorFromRGB(0x333333),NSParagraphStyleAttributeName : par};
}
self.tabBar.standardAppearance = appearanceBar;
}
这样我们就需要重新设置badgeColor,加上两句代码
appearanceBar.stackedLayoutAppearance.normal.badgeBackgroundColor = badgeColor;
appearanceBar.stackedLayoutAppearance.normal.badgeBackgroundColor = badgeColor;