iOS 7 UIBarButton戻るボタンの矢印の色


172

戻るボタンの矢印を変更しようとしています

ここに画像の説明を入力してください

私は現在、テキストサイズと[戻る]ボタンのテキストの色を制御するために以下を使用しています。

[[UIBarButtonItem appearance] setTitleTextAttributes:
  [NSDictionary dictionaryWithObjectsAndKeys:
    [UIColor whiteColor], UITextAttributeTextColor,
    [UIFont boldSystemFontOfSize:16.0f], UITextAttributeFont,
    [UIColor darkGrayColor], UITextAttributeTextShadowColor,
    [NSValue valueWithCGSize:CGSizeMake(0.0, -1.0)], UITextAttributeTextShadowOffset,
  nil] forState:UIControlStateNormal];

しかし、戻るボタンの矢印の色のみを変更したい場合は、どうすればよいですか?


戻るボタンの矢印の色を変更する解決策を見つけましたか?
OnkarK 2013

1
@OMK最終的に、infolistproperty NavBarColorを変更して機能させ、実際のnavbarcolorを別の色に設定しました。何が起こっていたのかは
わかり

1
一部のプロパティの動作はUINavigationBariOS 7から変更されました。他のいくつかのプロパティの効果も確認するには、回答をご覧ください。
Bhavin 2013年

してくださいこの問題のヘルプ:stackoverflow.com/questions/29923813/...
ミロスKresović

回答:


438

特定のナビゲーションコントローラーの戻るボタンのシェブロンの色を変更するには*:

self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

*複数のナビゲーションコントローラーを備えたアプリを使用していて、このシェブロンの色をそれぞれに適用したい場合は、次のように、外観プロキシを使用して、すべてのナビゲーションコントローラーに戻るボタンのシェブロンを設定できます。

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];

そして、適切な対策として、迅速に(コメントのJay Mayuに感謝):

UINavigationBar.appearance().tintColor = UIColor.whiteColor()

3
これは、アプリ全体に同じナビゲーションコントローラーを使用している場合にのみ、アプリ全体に適用されます。私は実際にバートの提案をお勧めします。
カイルクレッグ2013

1
複数のナビゲーションコントローラーに関するメモで回答を更新しました。アプリ全体のティントカラーを設定すると、他にも多くの副作用があるため、Bartの提案が「正解」であることにまだ同意しません。さらに、元の質問はアプリ全体のテーマを設定する方法を尋ねるものではなく、戻るボタンのテーマを設定する方法を尋ねるだけでした。
DiscDev 2013

1
これはバックシェブロンの色を設定していないようです。
jcampbell1 14年

2
@ jcampbell1-私はいくつかのアプリでこれを正常に使用しています...おそらく、複数のUINavigationControllersに関する警告を読んでいないでしょう。
DiscDev 2014年

7
迅速なUINavigationBar.appearance().tintColor = UIColor.whiteColor()
ジェイ・マユ

57

アプリ全体のtintColorを設定する必要があります。

self.window.tintColor = [UIColor redColor];

またはSwift 3の場合:

self.window?.tintColor = UIColor.blue

出典:iOS 7 UI移行ガイド


4
元の質問で述べたように、(アプリ全体ではなく)戻るボタンのシェブロンの色のみを設定したい場合、これは間違った答えです。正解はこちらの回答をご覧ください:stackoverflow.com/a/18809412/1103584
DiscDev

これをアプリデリゲートで使用して、戻るボタンを黒に変更しました。applicationDidFinishLaunchingWithOptionsメソッドに配置します... window.tintColor = [UIColor blackColor];
マークワトソン

これはiOS 6では機能しません。誰かが何をすべきか知っていますか?
Gavjr 2013年

1
これにより、すべてのUIActivityViewController(共有用)およびMFMailComposeViewController(電子メール送信用)を含むアプリ全体のtintColorに影響を及ぼしました。これらのダイアログは、tintColorが...で変更されていないことを前提としているため、見苦しい色の相互作用が発生する可能性があります。
Mike Lambert

これにより、の点滅カーソルなど、他の多くのオブジェクトのティントカラーが変更されUITextFieldます。絶対にお勧めしません。
ハンターモンク2016

55

メソッドを使用して、アプリナビゲーションのバー全体に色を設定できます

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions{
    [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
}

23

この方法では、矢印の色のみを変更できます(戻るボタンのタイトルの色は変更できません)。

[[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor blackColor]];

ナビゲーションバーには、矢印を表す_UINavigationBarBackIndicatorViewタイプ(サブビュー配列の最後の項目)のサブビューが含まれています。

結果は、戻るボタンの矢印と戻るボタンのタイトルの色が異なるナビゲーションバーです。


4
システムビューのサブビューの順序に依存するのは悪い考えです。
Glenn Maynard

2
これは機能しましたが、self.navigationController.navigationBar.tintColorの設定は機能しませんでした。
リッチフォックス

@GlennMaynardそのとおりです。これを実装する最良の方法self.navigationController.navigationBar.subviewsは、[戻る]ボタンが見つかるまで、によって返されるサブビューの配列を反復処理することです。
エヴァンR

@EvanRセルマッドの解決策は私にとってうまくいきましたが、サブビューの配列を反復することはうまくいきませんでした(私があなたにそうするのが賢明であることに同意するので私は最初に試みました)。うまくいく場合は、例を追加してください。ありがとう。
jungledev 2015

22

ストーリーボードを使用している場合は、ナビゲーションバーのティントカラーを設定できます。

ここに画像の説明を入力してください

ここに画像の説明を入力してください


まさに私が探していたもの。ありがとうございました!
チャドルイス

11

navigationControllerを初期化するrootViewController内で、このコードをviewDidAppearメソッド内に配置します。

//set back button color
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil] forState:UIControlStateNormal];
//set back button arrow color
[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];

2
UITextAttributeTextColorはiOS 7で非推奨になりました-NSForegroundColorAttributeNameを使用してください
2013

7

iOS 6では、tintColorはナビゲーションバー、タブバー、ツールバー、検索バー、およびスコープバーの背景に色を付けました。iOS 7でバーの背景に色を付けるには、代わりにbarTintColorプロパティを使用します。

iOS 7デザインリソースiOS 7 UI移行ガイド


2
これが1つです。...アプリのデリゲートに入れます。魅力的な作品!window.tintColor = [UIColor blackColor]; //黒が欲しかった
マークワトソン

6

tintColorボタン(またはバーボタン項目)またはビューコントローラーのビューでプロパティを設定できます。デフォルトでは、プロパティは親ビューからUIWindowアプリのトップレベルまでの色合いを継承します。


1
回答ありがとうございます。ただし、iOS 7では動作が少し異なります。古いコードはtintColorを使用していましたが、iOS 7はそれほど好きではないようです。最終的に、公式のApple Dev iOS 7移行ガイドを使用して、UIの問題の一部を修正しました
kevinl 2013

これを行う方法の個別の例については私の答えを参照してください: stackoverflow.com/a/18809412/1103584
DiscDev

5

私は両方を使わなければなりませんでした:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] 
                     setTitleTextAttributes:[NSDictionary 
               dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil] 
                                   forState:UIControlStateNormal];

[[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor whiteColor]];

そして私のために働きます、みんなに感謝します!


5
UINavigationBar *nbar = self.navigationController.navigationBar;

if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
   //iOS 7
   nbar.barTintColor = [UIColor blueColor]; // bar color
   //or custom color 
   //[UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];

   nbar.navigationBar.translucent = NO;

   nbar.tintColor = [UIColor blueColor]; //bar button item color

} else {
   //ios 4,5,6
   nbar.tintColor = [UIColor whiteColor];
   //or custom color
   //[UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];

}

すごい。それは私を助けました。ありがとう
Yogesh Lolusare 14

4

Swift 3を更新する

navigationController?.navigationItem.rightBarButtonItem?.tintColor = UIColor.yellow
navigationController?.navigationBar.tintColor = UIColor.red
navigationController?.navigationBar.barTintColor = UIColor.gray
navigationController?.navigationBar.titleTextAttributes =  [NSForegroundColorAttributeName: UIColor.blue]

結果: ここに画像の説明を入力してください


3

NavigationBar色を変えるだけで、以下のように色合いを設定できます。

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];

これは、iOS 7のティントカラーには影響しません。ドキュメントによると、「iOS 7では、外観プロキシAPIを使用したtintColorプロパティの設定はサポートされていません。」リンク
bachonk

3

矢印の画像を含むUIButtonに基づいてカスタムの戻るボタンを作成している場合は、サブクラスのスニペットを次に示します。これを使用して、コードでボタンを作成するか、インターフェイスビルダーでクラスを任意のUIButtonに割り当てることができます。戻る矢印の画像が自動的に追加され、テキストの色で着色されます。

@interface UIImage (TintColor)

- (UIImage *)imageWithOverlayColor:(UIColor *)color;

@end


@implementation UIImage (TintColor)

- (UIImage *)imageWithOverlayColor:(UIColor *)color
{
    CGRect rect = CGRectMake(0.0f, 0.0f, self.size.width, self.size.height);

    if (UIGraphicsBeginImageContextWithOptions) {
        CGFloat imageScale = 1.0f;
        if ([self respondsToSelector:@selector(scale)])
            imageScale = self.scale;
        UIGraphicsBeginImageContextWithOptions(self.size, NO, imageScale);
    }
    else {
        UIGraphicsBeginImageContext(self.size);
    }

    [self drawInRect:rect];

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetBlendMode(context, kCGBlendModeSourceIn);

    CGContextSetFillColorWithColor(context, color.CGColor);
    CGContextFillRect(context, rect);

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}

@end




#import "iOS7backButton.h"

@implementation iOS7BackButton

-(void)awakeFromNib
{
    [super awakeFromNib];

    BOOL is6=([[[UIDevice currentDevice] systemVersion] floatValue] <7);
    UIImage *backBtnImage = [[UIImage imageNamed:@"backArrow"] imageWithOverlayColor:self.titleLabel.textColor];
    [self setImage:backBtnImage forState:UIControlStateNormal];
    [self setTitleEdgeInsets:UIEdgeInsetsMake(0, 5, 0, 0)];
    [self setImageEdgeInsets:UIEdgeInsetsMake(0, is6?0:-10, 0, 0)];


}


+ (UIButton*) buttonWithTitle:(NSString*)btnTitle andTintColor:(UIColor*)color {
    BOOL is6=([[[UIDevice currentDevice] systemVersion] floatValue] <7);
    UIButton *backBtn=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 60, 30)];
    UIImage *backBtnImage = [[UIImage imageNamed:@"backArrow"] imageWithOverlayColor:color];
    [backBtn setImage:backBtnImage forState:UIControlStateNormal];
    [backBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, is6?5:-5, 0, 0)];
    [backBtn setImageEdgeInsets:UIEdgeInsetsMake(0, is6?0:-10, 0, 0)];
    [backBtn setTitle:btnTitle forState:UIControlStateNormal];
    [backBtn setTitleColor:color /*#007aff*/ forState:UIControlStateNormal];

    return backBtn;
}

@end

戻るボタンimage @ 2x


3

アプリ全体で戻る矢印のみを変更する場合は、次のようにします。

[[NSClassFromString(@"_UINavigationBarBackIndicatorView") appearance] 
  setTintColor:[UIColor colorWithHexString: @"#f00000"]];

これにより、App Storeから却下される可能性があります
Luke

@ルーク、私は何度かそれをうまく使いました。拒否はありません。しかし、うん、チャンスはまだ存在しています。
オルケンシュタイン

将来のiOSバージョンでも壊れる可能性があります
Lope

1
@ロープ、はい、どうしてですか。銀の弾丸を探しているのではありません。
オルケンシュタイン

iOS 10.1のサブビューを繰り返し処理すると、それが依然としてクラス名であることがわかりますが、ここに示すようにその外観を設定しても効果はありません。
arlomedia 2016

2

iOS 7では、次のコード行をファイル内application:didFinishLaunchingWithOptions:に配置AppDelegate.mできます。

[[UINavigationBar appearance] setTintColor:myColor];

myColorアプリ全体で戻るボタンの色に設定します。すべてのファイルに入れる必要はありません。


0

Swift 2.0:ナビゲーションバーとボタンの色分け

navigationController?.navigationBar.barTintColor = UIColor.blueColor()
navigationController?.navigationBar.tintColor = UIColor.whiteColor()
navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.