iOS13 tabbar黑线、背景色、 badgeColor适配

@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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值