iOS6とiOS7のナビゲーションバーとタブバーを同じフラットなデザインにする
iOS6とiOS7のナビゲーションバーとタブバーを同じフラットなデザインにする
はじめに
自分で作成したアプリに必要になり、実装してみた忘備録です。
Objective-c初心者です、実装方法が最適でない可能性があるため参考程度にしてください。もっといい方法があったらコメントください。
とりあえず見た目は整えられます。
ではさっそく。
目標イメージ
それぞれデフォルトからフラットな感じにする。
※作成したアプリの一部を抜粋しています。
コード
ナビゲーションバー、タブバーのほとんどはバージョン別で記述する。
タブアイテムの画像の共通の設定方法でいけます。
詳細はコード内コメントを参考にしてください。
- (void)viewDidLoad
{
[super viewDidLoad];
//ステータスバーの色を設定
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
UIColor *barBackColor = [UIColor colorWithRed:0.000 green:0.424 blue:0.718 alpha:1.0];
UIColor *textSelectedColor = [UIColor colorWithRed:0.945 green:0.769 blue:0.059 alpha:1.0];
UIColor *textUnSelectedColor = [UIColor whiteColor];
//iOS6,7の分岐 true = iOS7以上
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
//ナビゲーションバー,タブバーの背景に色を設定
[[UINavigationBar appearance] setBarTintColor:barBackColor];
[[UITabBar appearance] setBarTintColor:barBackColor];
//タブアイテムの選択,非選択時のテキストの色を設定
NSDictionary *selectedAttributes = @{NSForegroundColorAttributeName : textSelectedColor};
NSDictionary *attributesNormal = @{NSForegroundColorAttributeName : textUnSelectedColor};
[[UITabBarItem appearance] setTitleTextAttributes:selectedAttributes forState:UIControlStateSelected];
[[UITabBarItem appearance] setTitleTextAttributes:attributesNormal forState:UIControlStateNormal];
} else {
//伸縮可能な一色の画像を生成
UIImage *blueBackImage = [[self imageWithColor:barBackColor] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
UIImage *clearBackImage = [[self imageWithColor:[UIColor clearColor]] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
//ナビゲーショバー,ナビゲーショバーボタンの背景に画像を設定
[[UINavigationBar appearance] setBackgroundImage:blueBackImage forBarMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setBackgroundImage:clearBackImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
//タブバーの背景,選択中タブアイテムの背景に画像を設定
[[UITabBar appearance] setBackgroundImage:blueBackImage];
[[UITabBar appearance] setSelectionIndicatorImage:clearBackImage];
//タブアイテムの選択,非選択時のテキストの色を設定
NSDictionary *itemSelected = [NSDictionary dictionaryWithObjectsAndKeys:textSelectedColor, UITextAttributeTextColor,nil];
NSDictionary *itemUnSelected = [NSDictionary dictionaryWithObjectsAndKeys:textUnSelectedColor, UITextAttributeTextColor,nil];
//.hに記述したものを参照 @property IBOutlet UITabBar *myTabBar;
NSArray *items = [[self myTabBar] items];
for (UITabBarItem *item in items) {
[item setTitleTextAttributes:itemSelected forState:UIControlStateSelected];
[item setTitleTextAttributes:itemUnSelected forState:UIControlStateNormal];
}
}
//タブアイテムの選択,非選択時の画像を設定
NSArray *items = [[self myTabBar] items];
[[items objectAtIndex:0] setFinishedSelectedImage:[UIImage imageNamed:@"map.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"map_no.png"]];
[[items objectAtIndex:1] setFinishedSelectedImage:[UIImage imageNamed:@"list.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"list_no.png"]];
[[items objectAtIndex:2] setFinishedSelectedImage:[UIImage imageNamed:@"plus.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"plus_no.png"]];
[[items objectAtIndex:3] setFinishedSelectedImage:[UIImage imageNamed:@"info.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"info_no.png"]];
}
//参考ページ 「お?いけるくさい?」様より引用
- (UIImage *)imageWithColor:(UIColor *)color {
CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
参考にしたページ
お?いけるくさい?様 - 指定したUIColorとCGRectで、塗りつぶしのUIImageを生成する
Technology-Gym様 - UIAPPEARANCEでナビゲーションバーをカスタマイズする
Webサイト制作・iPhoneアプリ開発のPLUS様 - アプリの雰囲気がグッと高まる!TabBarの背景や、アイコンを好きなようにカスタム!
Author And Source
この問題について(iOS6とiOS7のナビゲーションバーとタブバーを同じフラットなデザインにする), 我々は、より多くの情報をここで見つけました https://qiita.com/roana0229/items/461409ae910199d38123著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .