专栏首页Objective-CiOS-修改系统 TabbarItem 图片、文字颜色

iOS-修改系统 TabbarItem 图片、文字颜色

一、系统 Tabbar 默认颜色(如下图):

TabbarItem默认渲染颜色.png

代码详见(如下):

- (void)viewDidLoad {
    [super viewDidLoad];

    HQHomeController *vcHome = [[HQHomeController alloc] init];
    HQHomeNavigationController *navHome = [[HQHomeNavigationController alloc] initWithRootViewController:vcHome];
    vcHome.title = @"首页";
    vcHome.tabBarItem.image = [UIImage imageNamed:@"tabbar_home"];

    HQCourseController *vcCourse = [[HQCourseController alloc] init];
    HQCourseNavigationController *navCourse = [[HQCourseNavigationController alloc] initWithRootViewController:vcCourse];
    vcCourse.title = @"健康课程";
    vcCourse.tabBarItem.image = [UIImage imageNamed:@"tabbar_message_center_highlighted"];

    HQConsultController *vcConsult = [[HQConsultController alloc] init];
    HQConsultNavigationController *navConsult = [[HQConsultNavigationController alloc] initWithRootViewController:vcConsult];
    vcConsult.title = @"线上资讯";
    vcConsult.tabBarItem.image = [UIImage imageNamed:@"tabbar_discover"];

    HQProfileController *vcProfile = [[HQProfileController alloc] init];
    HQProfileNavigationController *navProfile = [[HQProfileNavigationController alloc] initWithRootViewController:vcProfile];
    vcProfile.title = @"个人中心";
    vcProfile.tabBarItem.image = [UIImage imageNamed:@"tabbar_profile"];

    self.viewControllers = @[navHome, navCourse, navConsult, navProfile];
}

设置 tabbarItem 图片(显示图片原始颜色,不让系统渲染成蓝色)如(如下图):

没有被系统tabbar渲染的图片.png

代码详见(如下):

    HQHomeController *vcHome = [[HQHomeController alloc] init];
    HQHomeNavigationController *navHome = [[HQHomeNavigationController alloc] initWithRootViewController:vcHome];
    vcHome.title = @"首页";
    vcHome.tabBarItem.image = [UIImage imageNamed:@"tabbar_home"];

    // 设置 tabbarItem 选中状态的图片(不被系统默认渲染,显示图像原始颜色)
    UIImage *imageHome = [UIImage imageNamed:@"tabbar_home_highlighted"];
    imageHome = [imageHome imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    [vcHome.tabBarItem setSelectedImage:imageHome];

设置 tabbarItem 文字(显示自定义文字颜色,不让系统渲染成蓝色)如(如下图):

没有被系统tabbar渲染的文字.png

代码详见(如下):

    HQHomeController *vcHome = [[HQHomeController alloc] init];
    HQHomeNavigationController *navHome = [[HQHomeNavigationController alloc] initWithRootViewController:vcHome];
    vcHome.title = @"首页";
    vcHome.tabBarItem.image = [UIImage imageNamed:@"tabbar_home"];
    
    // 设置 tabbarItem 选中状态的图片(不被系统默认渲染,显示图像原始颜色)
    UIImage *imageHome = [UIImage imageNamed:@"tabbar_home_highlighted"];
    imageHome = [imageHome imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    [vcHome.tabBarItem setSelectedImage:imageHome];
    
    // 设置 tabbarItem 选中状态下的文字颜色(不被系统默认渲染,显示文字自定义颜色)
    NSDictionary *dictHome = [NSDictionary dictionaryWithObject:[UIColor orangeColor] forKey:NSForegroundColorAttributeName];
    [vcHome.tabBarItem setTitleTextAttributes:dictHome forState:UIControlStateSelected];

简单的封装下(详见代码):

  1. 抽取成一个方法
  • 传入控制器、标题、正常状态下图片、选中状态下图片
  • 直接调用这个方法就可以了 /** * 抽取成一个方法 * 传入控制器、标题、正常状态下图片、选中状态下图片 * 直接调用这个方法就可以了 */ - (void)controller:(UIViewController *)controller Title:(NSString *)title tabBarItemImage:(NSString *)image tabBarItemSelectedImage:(NSString *)selectedImage { controller.title = title; controller.tabBarItem.image = [UIImage imageNamed:image]; // 设置 tabbarItem 选中状态的图片(不被系统默认渲染,显示图像原始颜色) UIImage *imageHome = [UIImage imageNamed:selectedImage]; imageHome = [imageHome imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; [controller.tabBarItem setSelectedImage:imageHome]; // 设置 tabbarItem 选中状态下的文字颜色(不被系统默认渲染,显示文字自定义颜色) NSDictionary *dictHome = [NSDictionary dictionaryWithObject:[UIColor orangeColor] forKey:NSForegroundColorAttributeName]; [controller.tabBarItem setTitleTextAttributes:dictHome forState:UIControlStateSelected]; }

回到刚才位置调用一下:

    HQHomeController *vcHome = [[HQHomeController alloc] init];
    HQHomeNavigationController *navHome = [[HQHomeNavigationController alloc] initWithRootViewController:vcHome];
    // 下面注释的代码用这一行就可以替代了
    [self controller:vcHome Title:@"首页" tabBarItemImage:@"tabbar_home" tabBarItemSelectedImage:@"tabbar_home_highlighted"];
    
//    vcHome.title = @"首页";
//    vcHome.tabBarItem.image = [UIImage imageNamed:@"tabbar_home"];
//    
//    // 设置 tabbarItem 选中状态的图片(不被系统默认渲染,显示图像原始颜色)
//    UIImage *imageHome = [UIImage imageNamed:@"tabbar_home_highlighted"];
//    imageHome = [imageHome imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
//    [vcHome.tabBarItem setSelectedImage:imageHome];
//    
//    // 设置 tabbarItem 选中状态下的文字颜色(不被系统默认渲染,显示文字自定义颜色)
//    NSDictionary *dictHome = [NSDictionary dictionaryWithObject:[UIColor orangeColor] forKey:NSForegroundColorAttributeName];
//    [vcHome.tabBarItem setTitleTextAttributes:dictHome forState:UIControlStateSelected];

对比如图:

代码封装对比.png

二、修改 tabBarItem 图片方法二(直接设置文件夹下图片渲染模式)(见下图):

在图片所在文件夹中设置图片渲染模式为图片原始模式(不被渲染).png

1.代码中注释了修改图片被渲染的模式 2.图片文件夹中也是默认渲染模式 3.效果见下图

代码中不设置图片渲染模式效果.png

在图片所在文件夹中设置图片的渲染模式(见下图)

在文件夹中设置图片渲染模式.png

特别感谢 Oniityann 大神给我提醒,整理出来,方便大家查看!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • OC 对象的分类

    用户1890628
  • Xcode 清理存储空间

    用户1890628
  • Swift-MVVM 简单演练(四)

    用户1890628
  • 【2019年8月版本】OCP 071认证考试最新版本的考试原题-第4题

    Exammine the desciption of the PRODUCT DETALS table:

    用户5892232
  • [剑指offer] 平衡二叉树

    遍历每个结点,借助一个获取树深度的递归函数,根据该结点的左右子树高度差判断是否平衡,然后递归地对左右子树进行判断。

    尾尾部落
  • 【编程经验】结构体的高级使用及共用体的定义和使用

    结构体数组 结构体数组是一个数组,其数组的每一个元素都是结构体类型。在实际应用中,经常用结构体数组来 表示具有相同数据结构的一个群体,如一个班的学生档案,...

    编程范 源代码公司
  • 【Vue原理】Compile - 源码版 之 generate 拼接绑定的事件

    【Vue原理】Compile - 源码版 之 optimize 标记静态节点

    神仙朱
  • 记一次渗透过程中用sqlmap写shell

    这里看到了一个sa用户,嗯,有亮点!不过暂时也用不到,后面讲到提权的时候会提到sa

    HACK学习
  • Tree - 226. Invert Binary Tree

    用户5705150
  • Spring Cloud 5分钟搭建教程

    1.1.以下内容是我通过阅读官方文档,并成功实践后的经验总结,希望能帮助你更快地理解和使用Spring Cloud.

    java架构师

扫码关注云+社区

领取腾讯云代金券