iOS tabbar 选择图片默认为蓝色

隐身守侯 提交于 2019-12-10 03:31:47

用storyboard设计TabBar相当的快捷、方便。
但是在属性板栗设置TabBarItem背景图片的时候,Selected Image设置的图片颜色明明是红色,但是实际运行后却变为蓝色。
在StoryBoard中搞了很久也没解决,后来查到是要在代码中更改。

UITabItem的头文件,发现下面的内容:
/* The unselected image is autogenerated from the image argument. The selected image 
is autogenerated from the selectedImage if provided and the image argument otherwise. 
To prevent system coloring, provide images with UIImageRenderingModeAlwaysOriginal (see UIImage.h) 
*/  
- (instancetype)initWithTitle:(NSString *)title image:(UIImage *)image tag:(NSInteger)tag;  
- (instancetype)initWithTitle:(NSString *)title image:(UIImage *)image selectedImage:(UIImage *)selectedImage NS_AVAILABLE_IOS(7_0);  
- (instancetype)initWithTabBarSystemItem:(UITabBarSystemItem)systemItem tag:(NSInteger)tag;  
意思是,如果不希望使用系统颜色,需要对图片加上属性UIImageRenderingModeAlwaysOriginal
所以按此方式实验,在对应的TabBarViewController中添加代码如下:
UIImage *homeImageSel = [UIImage imageNamed:@"home_a.png"];
homeImageSel = [homeImageSel imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UITabBarItem *homeItem = [self.tabBar.items objectAtIndex:0];
homeItem.selectedImage = homeImageSel;

备注:其实你可以在Assets.xcassets  你放置图片的蓝色文件夹里面同样可以设置,选中你要的图片,然后右边属性 中  正数第二个 Render As  把Default(系统默认颜色--蓝色)  修改成Original Image (保持图片原色)就可以了

 

扩展:

着色(Tint Color)是iOS7界面中的一个重大改变,你可以设置一个UIImage在渲染时是否使用当前视图的Tint Color。UIImage新增了一个只读属性:renderingMode,对应的还有一个新增方法:imageWithRenderingMode:,它使用UIImageRenderingMode枚举值来设置图片的renderingMode属性。该枚举中包含下列值:

UIImageRenderingModeAutomatic         // 根据图片的使用环境和所处的绘图上下文自动调整渲染模式。 UIImageRenderingModeAlwaysOriginal // 始终绘制图片原始状态,不使用Tint Color。 UIImageRenderingModeAlwaysTemplate // 始终根据Tint Color绘制图片,忽略图片的颜色信息。

renderingMode属性的默认值是UIImageRenderingModeAutomatic,

即UIImage是否使用Tint Color取决于它显示的位置。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!