UINavigationBarとUISearchBarの両方には、tintColorプロパティがあり、これらの両方のアイテムの色合い(驚くべきことですが)を変更できます。アプリケーションのUITabBarにも同じことをしたいのですが、デフォルトの黒色から変更する方法を見つけました。何か案は?
UITabBarControllerをサブクラス化し、プライベートクラスを使用することで、機能させることができました。
@interface UITabBarController (private)
- (UITabBar *)tabBar;
@end
@implementation CustomUITabBarController
- (void)viewDidLoad {
[super viewDidLoad];
CGRect frame = CGRectMake(0.0, 0.0, self.view.bounds.size.width, 48);
UIView *v = [[UIView alloc] initWithFrame:frame];
[v setBackgroundColor:kMainColor];
[v setAlpha:0.5];
[[self tabBar] addSubview:v];
[v release];
}
@end
iOS 5では、ほとんどのUI要素の外観をカスタマイズするための新しい外観メソッドがいくつか追加されました。
外観プロキシを使用して、アプリ内のUITabBarのすべてのインスタンスをターゲットにできます。
IOS 5 + 6の場合:
[[UITabBar appearance] setTintColor:[UIColor redColor]];
IOS 7以降では、次を使用してください。
[[UITabBar appearance] setBarTintColor:[UIColor redColor]];
外観プロキシを使用すると、アプリ全体のタブバーインスタンスが変更されます。特定のインスタンスに対して、そのクラスの新しいプロパティのいずれかを使用します。
UIColor *tintColor; // iOS 5+6
UIColor *barTintColor; // iOS 7+
UIColor *selectedImageTintColor;
UIImage *backgroundImage;
UIImage *selectionIndicatorImage;
最終回答の補遺があります。基本的なスキームは正しいものの、部分的に透明な色を使用するトリックは改善できます。デフォルトのグラデーションが透けて見えるようにするためだけのものだと思います。また、少なくともOS 3では、TabBarの高さは48ではなく49ピクセルです。
したがって、グラデーション付きの適切な1 x 49イメージがある場合、これはviewDidLoadのバージョンです。
- (void)viewDidLoad {
[super viewDidLoad];
CGRect frame = CGRectMake(0, 0, 480, 49);
UIView *v = [[UIView alloc] initWithFrame:frame];
UIImage *i = [UIImage imageNamed:@"GO-21-TabBarColorx49.png"];
UIColor *c = [[UIColor alloc] initWithPatternImage:i];
v.backgroundColor = c;
[c release];
[[self tabBar] addSubview:v];
[v release];
}
AddSubviewを使用すると、ボタンのクリック可能性が失われるため、代わりに
[[self tabBar] addSubview:v];
つかいます:
[[self tabBar] insertSubview:v atIndex:0];
IOS 7の場合:
[[UITabBar appearance] setBarTintColor:[UIColor colorWithRed:(38.0/255.0) green:(38.0/255.0) blue:(38.0/255.0) alpha:1.0]];
また、視覚的な欲求に応じて最初に設定することをお勧めします。
[[UITabBar appearance] setBarStyle:UIBarStyleBlack];
バースタイルは、ビューコンテンツとタブバーの間に微妙な区切り記号を置きます。
これを行う簡単な方法はありません。基本的にUITabBarをサブクラス化し、カスタム描画を実装して必要なことを行う必要があります。効果のためにはかなりの作業ですが、それだけの価値があるかもしれません。バグをAppleでファイリングして、将来のiPhone SDKに追加することをお勧めします。
これは完璧なソリューションです。これは、iOS5およびiOS4でうまく機能します。
//---- For providing background image to tabbar
UITabBar *tabBar = [tabBarController tabBar];
if ([tabBar respondsToSelector:@selector(setBackgroundImage:)]) {
// ios 5 code here
[tabBar setBackgroundImage:[UIImage imageNamed:@"image.png"]];
}
else {
// ios 4 code here
CGRect frame = CGRectMake(0, 0, 480, 49);
UIView *tabbg_view = [[UIView alloc] initWithFrame:frame];
UIImage *tabbag_image = [UIImage imageNamed:@"image.png"];
UIColor *tabbg_color = [[UIColor alloc] initWithPatternImage:tabbag_image];
tabbg_view.backgroundColor = tabbg_color;
[tabBar insertSubview:tabbg_view atIndex:0];
}
[[self tabBar] insertSubview:v atIndex:0];
は私にとって完璧に機能します。
私にとっては、Tabbarの色を次のように変更するのは非常に簡単です。
[self.TabBarController.tabBar setTintColor:[UIColor colorWithRed:0.1294 green:0.5686 blue:0.8353 alpha:1.0]];
[self.TabBarController.tabBar setTintColor:[UIColor "YOUR COLOR"];
これを試して!!!
[[UITabBar appearance] setTintColor:[UIColor redColor]];
[[UITabBar appearance] setBarTintColor:[UIColor yellowColor]];
背景色のみ
Tabbarcontroller.tabBar.barTintColor=[UIColor redcolour];
またはApp Delegateでこれ
[[UITabBar appearance] setBackgroundColor:[UIColor blackColor]];
タブバーの選択解除アイコンの色を変更するため
IOS 10の場合:
// this code need to be placed on home page of tabbar
for(UITabBarItem *item in self.tabBarController.tabBar.items) {
item.image = [item.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}
IOS 10より上:
// this need to be in appdelegate didFinishLaunchingWithOptions
[[UITabBar appearance] setUnselectedItemTintColor:[UIColor blackColor]];
[v setBackgroundColor ColorwithRed: Green: Blue: ];
既存の回答にはいくつかの良いアイデアがあり、多くはわずかに異なる動作をし、選択するものはターゲットとするデバイスと達成することを目指している外観の種類にも依存します。 UITabBar
は、外観をカスタマイズする際に直観に反することで悪名高いですが、ここで役立ついくつかのトリックを次に示します。
1)。あなたがよりフラットな外観のために光沢のあるオーバーレイを取り除くことを探しているなら:
tabBar.backgroundColor = [UIColor darkGrayColor]; // this will be your background
[tabBar.subviews[0] removeFromSuperview]; // this gets rid of gloss
2)。カスタムイメージをtabBarボタンに設定するには、次のようにします。
for (UITabBarItem *item in tabBar.items){
[item setFinishedSelectedImage:selected withFinishedUnselectedImage:unselected];
[item setImageInsets:UIEdgeInsetsMake(6, 0, -6, 0)];
}
selected
とunselected
は、選択したUIImage
オブジェクトです。それらをフラットな色にしたい場合、私が見つけた最も簡単な解決策は、目的のUIView
でbackgroundColor
を作成し、それをUIImage
にレンダリングすることですQuartzCoreの助け。ビューのコンテンツでUIView
を取得するには、UIImage
のカテゴリで次のメソッドを使用します。
- (UIImage *)getImage {
UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, [[UIScreen mainScreen]scale]);
[[self layer] renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return viewImage;
}
3)最後に、ボタンのタイトルのスタイルをカスタマイズすることもできます。行う:
for (UITabBarItem *item in tabBar.items){
[item setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor redColor], UITextAttributeTextColor,
[UIColor whiteColor], UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset,
[UIFont boldSystemFontOfSize:18], UITextAttributeFont,
nil] forState:UIControlStateNormal];
}
これにより、調整を行うことができますが、それでもかなり制限されています。特に、ボタン内のテキストの配置を自由に変更することはできません。また、選択/非選択ボタンに異なる色を使用することはできません。より具体的なテキストレイアウトを行いたい場合は、UITextAttributeTextColor
を明確に設定し、パート(2)のselected
およびunselected
イメージにテキストを追加するだけです。
Swift 3.0回答:(Vaibhav Gaikwadから)
タブバーの選択解除アイコンの色を変更するには:
if #available(iOS 10.0, *) {
UITabBar.appearance().unselectedItemTintColor = UIColor.white
} else {
// Fallback on earlier versions
for item in self.tabBar.items! {
item.image = item.image?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
}
}
テキストの色のみを変更する場合:
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.white], for: .normal)
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.red, for: .selected)
もう1つの解決策(ハック)は、tabBarControllerのアルファを0.01に設定して、実質的に見えなくてもクリック可能にすることです。次に、メインウィンドウのペン先の下部にあるImageViewコントロールを、アルファ化されたtabBarCOntrollerの下のカスタムタブバー画像で設定します。次に、tabbarcontrollerがビューを切り替えるときに、画像を交換し、色を変更するか、ハイライトします。
ただし、「...詳細」を失い、機能をカスタマイズします。
if ([tabBar respondsToSelector:@selector(setBackgroundImage:)]) {
// ios 5 code here
[tabBar setBackgroundImage:[UIImage imageNamed:@"image.png"]];
}
else {
// ios 4 code here
CGRect frame = CGRectMake(0, 0, 480, 49);
UIView *tabbg_view = [[UIView alloc] initWithFrame:frame];
UIImage *tabbag_image = [UIImage imageNamed:@"image.png"];
UIColor *tabbg_color = [[UIColor alloc] initWithPatternImage:tabbag_image];
tabbg_view.backgroundColor = tabbg_color;
[tabBar insertSubview:tabbg_view atIndex:0];
}
こんにちはiOS SDK 4を使用しています。たった2行のコードでこの問題を解決できました。次のようになります。
tBar.backgroundColor = [UIColor clearColor];
tBar.backgroundImage = [UIImage imageNamed:@"your-png-image.png"];
お役に立てれば!
AppDelegate
の外観を使用したSwift 3は、次のことを行います。
UITabBar.appearance().barTintColor = your_color