最近在做IOS项目中 TABBAR的式样和普通的不同。比如说,普通的TABBAR的式样是 选择的状态是图片和文字改变颜色,
背景不会改变,而这次式样是 图片文字不改变,背景改变。 IOS没有直接设置选择的tab直接改变背景颜色的方法。
只有一个可以设置背景图片的方法setSelectionIndicatorImage。所以只能先将一个宽度为1的图片根据TAB的宽度拉伸设置背景颜色。
代码如下:
//不选择状态的背景
UIImage *bgImage = [UIImage imageNamed:@"main_tabbtn_unselect"];
//选择状态的背景(宽度为1 高度为49)
UIImage *tempImage = [UIImage imageNamed:@"main_tabbtn_select"];
//根据屏幕宽度定每个选择状态背景的大小
CGFloat width = self.tabBar.frame.size.width / 3;
//这个方法比较关键,让一个宽度为2的像素拉长至每个TAB的宽度(HEGIHT:IP6的宽度暂时没有考虑)
UIImage * selectionImage = [self resizeImage:tempImage rect:CGRectMake(0, 0, width, 49)];
//设置不选择状态背景
[[UITabBar appearance] setBackgroundImage:bgImage];
//设置选择状态背景
[[UITabBar appearance] setSelectionIndicatorImage:selectionImage];
//设置每个TAB的文字内容和背景图
UITabBarItem *item1 = [self.tabBar.items objectAtIndex:0];
item1.title = @"tab1";
UITabBarItem *item2 = [self.tabBar.items objectAtIndex:1];
item2.title = @"tab2";
UITabBarItem *item3 = [self.tabBar.items objectAtIndex:2];
item3.title = @"tab3";
//这个模式UIImageRenderingModeAlwaysOriginal最关键,表示原来图片什么颜色就一直表示什么颜色,
//否则因为TABBAR不选择的时候图片表示成了灰色
item1.image = [[UIImage imageNamed:@"maintab1"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
item2.image = [[UIImage imageNamed:@"maintab2"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
item3.image = [[UIImage imageNamed:@"maintab3"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
//设置文字颜色(大小还没设置)
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor yellowColor],
UITextAttributeTextColor, nil] forState:UIControlStateNormal];
//设置被选择文字的颜色
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f && [[[UIDevice currentDevice] systemVersion] floatValue] < 8.0f ) {
[self.tabBar setTintColor:[UIColor yellowColor]];
} else {
[self.tabBar setSelectedImageTintColor:[UIColor yellowColor]];
}
//UIImage大小变更
- (UIImage*)resizeImage:(UIImage *)img rect:(CGRect)rect{
UIGraphicsBeginImageContext(rect.size);
[img drawInRect:rect];
UIImage* resizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resizedImage;
}