关于 UITabBar 的疑难杂症

引言


# 一. barItem 染色异常问题

# 1. 问题表现:

添加UITabBarItem到tabbar上,但是图片会被染成蓝色;

# 2. 问题分析:

tabbar默认会帮我们染色,所以我们创建的 UITabBarItem 默认会被 tinkColor 染色的影响。

# 3. 问题解决:

解决办法就是添加参数 imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal,这样 UITabBarItem 的图片变不会受到tinkColor影响。

    UIImage *nomalImg = [UIImage imageNamed:@"tab"];
    UIImage *selImg   = [[UIImage imageNamed:@"tab_sel"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    
    UITabBarItem *item1 = [[UITabBarItem alloc] initWithTitle:@"商城" image:nomalImg selectedImage:selImg];

# 二. tabbar 背景色问题

# 1. 问题表现:

设置tabbar的背景色是0xFFFFFF的白色,但是实际的效果确是灰白色,并不是全白色;

# 2. 问题分析:

tabbar 默认是透明的(属性translucent),会对 tabbar 下面的视图进行高斯模糊,然后再与背景色混合。

# 3. 问题解决:

1.自由做法:

addSubview:一个 view 到 tabbar 上,接下来自己绘制4个按钮;(可操作性强,缺点是 tabbar 的逻辑需要自己再实现一遍)

2.改变tabbar透明度:

设置translucent=YES,再修改背景色;(引入一个巨大的坑,导致UITabbarViewController上面的子VC的self.view属性高度会变化!)

3.空白图做法:

把背景图都用一张空白的图片替代,如下:(最终采纳的做法)

self.tabBar.backgroundImage = [[UIImage alloc] init];
self.tabBar.backgroundColor = [UIColor whiteColor];


# 三. tabbar 顶部线条问题

# 1. 问题表现:

UITabbar 默认在 tabbar 的顶部会有一条灰色的线,但是并没有一个属性可以修改其颜色。

# 2. 问题分析:

从Xcode的工具来看,这条线是一个UIImageView:

再从UITabbar的头文件来看,这条线的图片可能是shadowImage

# 3. 问题解决:

1.自定义View:

shadowImage用一张空白的图片替代,然后自己再添加想要的线条大小和颜色。

    self.tabBar.shadowImage = [[UIImage alloc] init];
    UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tabBar.width, 0.5)];
    lineView.backgroundColor = [UIColor colorWithHexString:@"e8e8e8"];
    [self.tabBar addSubview:lineView];

2.自定义图片:

使用自定义的图片 设置给 shadowImage;

    self.tabBar.shadowImage = [UIImage imageNamed:@"xxx"];