关于 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"];