眼看iOS9就要出了。最近做项目用的系统的UITabBarController,就mark一下遇到的问题。
系统默认的UITabBarController使用storyboard可以进行设置。
下面主要是讲代码设置tabbar的图片与颜色。
1.tabbar的背景颜色或背景图(如图灰色效果)
tabBarController.tabBar.backgroundImage = [UIImage imageNamed:@"tabbar_unselected"];
这个图片可以是一张宽度为2像素,高98的一个细线图。
2.设置选中item的背景颜色或背景图(如图,蓝色效果)
UIImage* selectedImage = [UIImage imageNamed:@"tabbar_select"]; selectedImage = [selectedImage resizableImageWithCapInsets:UIEdgeInsetsZero]; tabBarController.tabBar.selectionIndicatorImage = selectedImage;
这里的图片也可以跟上面的背景图片一样,可以是一张宽度为2像素,高98的一个细线图。
selectedImage = [selectedImage resizableImageWithCapInsets:UIEdgeInsetsZero];
是为了用细线图填充要设置的image
3.设置图片颜色与字体颜色及字号
NSMutableDictionary *textAttrs=[NSMutableDictionary dictionary]; textAttrs[NSForegroundColorAttributeName]=[UIColor whiteColor]; textAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:12.f]; MLNavigationController * oneController = [[MLNavigationController alloc] initWithRootViewController:VC1]; oneController.tabBarItem.title = @"首页"; oneController.tabBarItem.image = [[UIImage imageNamed:@"tabbar_home"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; oneController.tabBarItem.selectedImage = [[UIImage imageNamed:@"tabbar_home"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; [oneController.tabBarItem setTitleTextAttributes:textAttrs forState:UIControlStateNormal];
我的需求是设置图片与颜色在选中与未选中状态下都为白色。
3.1字体颜色设置
字典textAttrs的key值可以双击去查看你要设置的选项来设置,这里注意一点
- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;
这个方法state只能设置UIControlStateNormal,UIControlStateSelected,UIControlStateDisabled三个type
3.2图片颜色设置
图片你会发现用了一个image的方法
- (UIImage *)imageWithRenderingMode:(UIImageRenderingMode)renderingMode NS_AVAILABLE_IOS(7_0);
这个方法是告诉系统取消渲染,使用原本的图片颜色。
这样你就可以用你提供的selectedImage与image进行设置了。
oneController.tabBarItem.image = [[UIImage imageNamed:@"tabbar_home"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];oneController.tabBarItem.selectedImage = [[UIImage imageNamed:@"tabbar_home"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];