UITabBarの色を変える
UITabBarControllerのデザインをちょこちょこ調整する必要があった。
またいつか使いそうな気がするのでメモ。
この設定はiOS7.1系以降なら問題なく動くと思う。7.0系は問題があったようななかったような。
+ (UIImage *)imageFromColor:(UIColor *)color size:(CGSize)size {
CGRect bounds = CGRectZero;
bounds.size = size;
UIGraphicsBeginImageContext(bounds.size);
CGContextRef contextRef = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(contextRef, [color CGColor]);
CGContextFillRect(contextRef, bounds);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
- (void)setupTabBarAppearance {
// タブバーアイテムの文字色を変える
[[UITabBarItem appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName: [UIColor redColor]}
forState:UIControlStateNormal];
[[UITabBarItem appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName: [UIColor blueColor]}
forState:UIControlStateSelected];
// タブバーアイテムのアイコンを変える
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
for (UIViewController *viewController in tabBarController.viewControllers) {
UITabBarItem *item = viewController.tabBarItem;
// 通常時の画像。 imageWithRenderingMode:で画像をそのまま表示するよう設定
item.image = [[UIImage imageNamed:@"first"] imageWithRenderingMode:(UIImageRenderingModeAlwaysOriginal)];
// 選択時の画像。 デフォルト。
item.selectedImage = [UIImage imageNamed:@"first"];
}
// タブバーの背景色を設定
[[UITabBar appearance] setBarTintColor:[UIColor whiteColor]];
// 選択されたタブバーアイテムの背景色を設定
CGFloat tabBarItemWidth = CGRectGetWidth(self.window.frame)/tabBarController.viewControllers.count;
CGSize tabBarItemSize = CGSizeMake(tabBarItemWidth, CGRectGetHeight(tabBarController.tabBar.frame));
UIImage *selectedTabBarImage = [[self class] imageFromColor:[UIColor purpleColor] size:tabBarItemSize];
[[UITabBar appearance] setSelectionIndicatorImage:selectedTabBarImage];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[self setupTabBarAppearance];
return YES;
}
結果
画像のfirst
はTabBarBaseのプロジェクトサンプルに最初から入っている画像(画像というか、vectorのPDFが入っている