【iOS】标签栏图标字体颜色设置方面问题(tabBarItem、tabBar)
关于标签栏中的图标和文字在UI上的显示逻辑如下:
1、一般而言,图标和文字只需要按照如下代码配置
UITabBarItem *tBarItem = [[UITabBarItem alloc] initWithTitle:@"Home" image:[UIImage imageNamed:@""] tag:1]; [navigationController setTabBarItem:tBarItem];
也就是说,UI工程师只需要提供一份图标就行了,选中和非选中状态下的图片和文字一般默认的是蓝色和灰色,当然可以通过下列代码改变颜色
self.tabBar.tintColor = [UIColor purpleColor];
self.tabBar.unselectedItemTintColor = [UIColor blueColor];
知识点补充:
在设计和开发中,UI 工程师提供的图标通常有以下两种类型,它们的专业名词如下: 1. **纯色图片(Monochrome Image)**: - **矢量图标(Vector Icon)**:通常是指由矢量图形组成的纯色图标。这种图标可以通过改变颜色属性(如 `tintColor`)来适应不同的 UI 需求。它们通常以 SVG 或 PDF 格式提供,并且可以根据需要进行缩放而不会失真。 - **模板图像(Template Image)**:在 iOS 开发中,纯色图标通常会被处理为模板图像。系统会自动应用 `tintColor` 来渲染这些图标的颜色。 2. **非纯色图片(Non-Monochrome Image)**: - **彩色图标(Colored Icon)**:这种图标包含多个颜色和渐变,设计师已经在图标中指定了颜色信息,不能通过代码直接修改颜色。这种图标通常以 PNG、JPEG 等位图格式提供。 - **位图图标(Bitmap Icon)**:一般指非矢量格式的图标,通常为彩色,适用于展示复杂的图形和细节。 ### 总结 - **纯色图片**:称为 **矢量图标** 或 **模板图像**,可以通过 `tintColor` 等属性修改颜色。 - **非纯色图片**:称为 **彩色图标** 或 **位图图标**,包含设计师预先定义的颜色,不能通过代码直接修改颜色。
2、上面说的主要是当icon是矢量图(纯色图)的情况,如果是非矢量图(彩色图),那么上述方法就不适用了,需要做的事就是两个:
(1)使用原图渲染
(2)分开配置选中状态和非选中状态下的图片
相关代码如下:
// 设置未选中的图标 UIImage *normalImage = [[UIImage imageNamed:normalImgName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; tabBarItem.image = normalImage; // 设置选中时的图标 UIImage *selectedImage = [[UIImage imageNamed:activeImgName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; tabBarItem.selectedImage = selectedImage;
然后文字方面如果选中状态和非选中状态下的颜色是一样的,那么可以使用下列代码做到:
self.tabBar.tintColor = [UIColor purpleColor];
self.tabBar.unselectedItemTintColor = [UIColor blueColor];
文字方面如果选中状态和非选中状态下的颜色是还不一样,那么可以使用下列方式做到:
(1)将下列颜色设置为透明色
(2)分开设置字体颜色
// 设置未选中状态的文字颜色 [tabBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName : unselectedColor} forState:UIControlStateNormal]; // 设置选中状态的文字颜色 [tabBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName : selectedColor} forState:UIControlStateSelected];
self.tabBar.tintColor = [UIColor clearColor]; self.tabBar.unselectedItemTintColor = [UIColor clearColor];
3、如果想做到文字跟图片一样也是彩色的,非纯色,那么需要让UI工程师将文字内容也做进icon图片中。