UITabBar-UITabBarItem的选中图片未按照原图样式显示的问题mark

来源:互联网 发布:上海鲁班软件 bim 编辑:程序博客网 时间:2024/04/27 14:15

临时mark一个问题:

问题描述:

今天在写tabbarViewController时,在设置了各个controller的UITabBarItem以及tabbar的tintcolor之后,发现:

注意,我用的图是镂空的;

具体的代码如下:

        UITabBarItem *conversTabBarItem = [[UITabBarItem alloc]initWithTitle:@"消息" image:[UIImage imageNamed:@"conversTabBar_N"] selectedImage:[UIImage imageNamed:@"conversTabBar_H"]];

相关影响颜色的只有tintColor的设置;

    [tabBar setTintColor:APPMAINCOLOR];

它的作用是设置item的全局高亮显示,诚然他起了作用;


之所以出现这个问题,是设置在item中的图片渲染方式造成的问题;


我们看下UIImage的提供的图片表现模式的枚举:

typedef NS_ENUM(NSInteger, UIImageRenderingMode) {    UIImageRenderingModeAutomatic,          // Use the default rendering mode for the context where the image is used        UIImageRenderingModeAlwaysOriginal,     // Always draw the original image, without treating it as a template    UIImageRenderingModeAlwaysTemplate,     // Always draw the image as a template image, ignoring its color information} NS_ENUM_AVAILABLE_IOS(7_0);

如果不设置的话,默认就是自动处理,具体被表现的方式系统会根据上下文进行选择;

比如:

navigation bars, tab bars, toolbars, and segmented controls 对设置的图片就是采用模板的方式;

而其他的imageView和webView对图片的呈现,则是用原图的方式;


一旦设置了具体的渲染方式(姑且称作渲染),图片就会被强制按照该方式呈现;


现在,我们就明白了为什么这个图没有按照镂空的方式显示,修改代码如下:

    UITabBarItem *conversTabBarItem = [[UITabBarItem alloc]initWithTitle:@"消息" image:[[UIImage imageNamed:@"conversTabBar_N"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] selectedImage:[[UIImage imageNamed:@"conversTabBar_H"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
即强制图片按原图渲染;

效果如下:


就不感谢谁了,希望对大家有帮助吧。





0 0
原创粉丝点击