iOS ナビゲーション バーのタイトルの色がデフォルトで白になっているようです。別の色に変更する方法はありますか?
navigationItem.titleView
画像を使ったアプローチは承知しています。私のデザインスキルは限られており、標準の光沢が得られなかったので、テキストの色を変更することを好みます.
どんな洞察も大歓迎です。
iOS ナビゲーション バーのタイトルの色がデフォルトで白になっているようです。別の色に変更する方法はありますか?
navigationItem.titleView
画像を使ったアプローチは承知しています。私のデザインスキルは限られており、標準の光沢が得られなかったので、テキストの色を変更することを好みます.
どんな洞察も大歓迎です。
ナビゲーション コントローラー全体に対する最新の方法は、ナビゲーション コントローラーのルート ビューが読み込まれるときに、これを 1 回実行します。
[self.navigationController.navigationBar setTitleTextAttributes:
@{NSForegroundColorAttributeName:[UIColor yellowColor]}];
ただし、これは後続のビューには影響しないようです。
View Controllerごとの古い方法(これらの定数はiOS 6用ですが、iOS 7の外観でView Controllerごとに実行したい場合は、同じアプローチが必要ですが、定数が異なります):
UILabel
のとしてを使用する必要がありtitleView
ますnavigationItem
。
ラベルは次のことを行う必要があります。
label.backgroundColor = [UIColor clearColor]
)。label.font = [UIFont boldSystemFontOfSize: 20.0f]
) を使用します。label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]
)。label.textAlignment = NSTextAlignmentCenter
(UITextAlignmentCenter
古い SDK の場合) )。ラベル テキストの色を任意のカスタム カラーに設定します。テキストが読みにくい影に溶け込まないような色が必要です。
試行錯誤しながらこれを解決しましたが、思いついた値は最終的に単純すぎて、Apple が選んだものにはなりませんでした。:)
これを確認したい場合は、このコードを Apple の NavBar サンプル にドロップしてinitWithNibName:bundle:
ください。これにより、テキストが黄色のラベルに置き換えられます。これは、色を除いて、Apple のコードによって作成されたオリジナルと見分けがつかないはずです。PageThreeViewController.m
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
// this will appear as the title in the navigation bar
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:20.0];
label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
label.textAlignment = NSTextAlignmentCenter;
// ^-Use UITextAlignmentCenter for older SDKs.
label.textColor = [UIColor yellowColor]; // change this color
self.navigationItem.titleView = label;
label.text = NSLocalizedString(@"PageThreeTitle", @"");
[label sizeToFit];
}
return self;
}
編集:また、以下のErik Bの回答を読んでください。私のコードは効果を示していますが、彼のコードはこれを既存のView Controllerにドロップする簡単な方法を提供しています。
これがかなり古いスレッドであることは承知していますが、新しいユーザーにとって、iOS 5 がタイトル プロパティを確立するための新しいプロパティをもたらすことを知っておくと役立つと思います。
UINavigationBar を使用setTitleTextAttributes
して、フォント、色、オフセット、および影の色を設定できます。
さらに、アプリケーション全体で同じデフォルトの UINavigationBar のタイトル テキスト属性を設定できUINavigationBars
ます。
たとえば、次のようにします。
NSDictionary *navbarTitleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor whiteColor],UITextAttributeTextColor,
[UIColor blackColor], UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(-1, 0)], UITextAttributeTextShadowOffset, nil];
[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];
iOS 5 では、navigationBar のタイトルの色を次の方法で変更できます。
navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]};
スティーブンフィッシャーの答えに基づいて、私はこのコードを書きました:
- (void)setTitle:(NSString *)title
{
[super setTitle:title];
UILabel *titleView = (UILabel *)self.navigationItem.titleView;
if (!titleView) {
titleView = [[UILabel alloc] initWithFrame:CGRectZero];
titleView.backgroundColor = [UIColor clearColor];
titleView.font = [UIFont boldSystemFontOfSize:20.0];
titleView.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
titleView.textColor = [UIColor yellowColor]; // Change to desired color
self.navigationItem.titleView = titleView;
[titleView release];
}
titleView.text = title;
[titleView sizeToFit];
}
このコードの利点は、フレームを適切に処理することに加えて、コントローラーのタイトルを変更すると、カスタムタイトルビューも更新されることです。手動で更新する必要はありません。
もう1つの大きな利点は、カスタムタイトルカラーを有効にするのが非常に簡単になることです。このメソッドをコントローラーに追加するだけです。
上記の提案のほとんどは、iOS 7 での使用のために現在廃止されています -
NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor whiteColor],NSForegroundColorAttributeName,
[UIColor whiteColor],NSBackgroundColorAttributeName,nil];
self.navigationController.navigationBar.titleTextAttributes = textAttributes;
self.title = @"Title of the Page";
また、設定できるさまざまなテキスト プロパティについては、NSAttributedString.h を確認してください。
スウィフト版
ほとんどの人が Objective_C バージョンの回答を提示していることがわかりました
必要な方のためにSwiftを使ってこの機能を実装したいと思います。
In ViewDidload
1.NavigationBarの背景を色付きにする(例:BLUE)
self.navigationController?.navigationBar.barTintColor = UIColor.blueColor()
2.NavigationBarの背景を画像にする(例:ABC.png)
let barMetrix = UIBarMetrics(rawValue: 0)!
self.navigationController?.navigationBar
.setBackgroundImage(UIImage(named: "ABC"), forBarMetrics: barMetrix)
3.NavigationBarのタイトルを変更する(例:[Font:Futura,10] [Color:Red])
navigationController?.navigationBar.titleTextAttributes = [
NSForegroundColorAttributeName : UIColor.redColor(),
NSFontAttributeName : UIFont(name: "Futura", size: 10)!
]
(ヒント 1: UIFont の後の "!" マークを忘れないでください)
(ヒント 2: タイトル テキストには多くの属性があります。「NSFontAttributeName」をクリックすると、クラスを入力して、必要なキー名とオブジェクト タイプを表示できます)
私が助けてくれることを願っています!:D
iOS 5 以降では、タイトル テキストの色とナビゲーション バーのフォントを titleTextAttribute Dictionary (UInavigation コントローラー クラス リファレンスで定義済みの辞書) を使用して設定する必要があります。
[[UINavigationBar appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor blackColor],UITextAttributeTextColor,
[UIFont fontWithName:@"ArialMT" size:16.0], UITextAttributeFont,nil]];
ページの色を変更しようとしている場合、tewha によるソリューションはうまく機能しますが、すべてのページで色を変更できるようにしたいと考えています。上のすべてのページで機能するように、いくつかの小さな変更を加えました。UINavigationController
NavigationDelegate.h
//This will change the color of the navigation bar
#import <Foundation/Foundation.h>
@interface NavigationDelegate : NSObject<UINavigationControllerDelegate> {
}
@end
NavigationDelegate.m
#import "NavigationDelegate.h"
@implementation NavigationDelegate
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
CGRect frame = CGRectMake(0, 0, 200, 44);//TODO: Can we get the size of the text?
UILabel* label = [[[UILabel alloc] initWithFrame:frame] autorelease];
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:20.0];
label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor yellowColor];
//The two lines below are the only ones that have changed
label.text=viewController.title;
viewController.navigationItem.titleView = label;
}
@end
これは、スティーブンスに基づく私のソリューションです
本当の違いは、テキストの長さに応じて位置を調整するためにいくつかの処理を入れたことです。アップルのやり方と似ているようです
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(([self.title length] < 10 ? UITextAlignmentCenter : UITextAlignmentLeft), 0, 480,44)];
titleLabel.backgroundColor = [UIColor clearColor];
titleLabel.font = [UIFont boldSystemFontOfSize: 20.0f];
titleLabel.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
titleLabel.textAlignment = ([self.title length] < 10 ? UITextAlignmentCenter : UITextAlignmentLeft);
titleLabel.textColor = [UIColor redColor];
titleLabel.text = self.title;
self.navigationItem.titleView = titleLabel;
[titleLabel release];
フォント サイズに応じて 10 の値を調整することをお勧めします。
ナビゲーション ボタンでテキストが中心から外れて表示されるという問題が発生しました (ボタンが 1 つしかない場合)。それを修正するために、フレームサイズを次のように変更しました。
CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44);
navigationBar の背景画像と左ボタン項目をカスタマイズしましたが、灰色のタイトルが背景に収まりません。それから私は使用します:
[self.navigationBar setTintColor:[UIColor darkGrayColor]];
ティントカラーをグレーに変更します。そして今、タイトルは白!それが私が欲しいものです。
また、お役に立てれば幸いです:)
これはかなり古いスレッドですが、iOS 7以降のナビゲーションバータイトルの色、サイズ、垂直位置を設定するための回答を提供することを考えています
色とサイズについて
NSDictionary *titleAttributes =@{
NSFontAttributeName :[UIFont fontWithName:@"Helvetica-Bold" size:14.0],
NSForegroundColorAttributeName : [UIColor whiteColor]
};
縦置き用
[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-10.0 forBarMetrics:UIBarMetricsDefault];
タイトルを設定し、属性辞書を割り当てます
[[self navigationItem] setTitle:@"CLUBHOUSE"];
self.navigationController.navigationBar.titleTextAttributes = titleAttributes;
子ナビゲーション バーを押したり、タブバーにタイトルを表示したりする際に使用されるため、self.title を設定することをお勧めします。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// create and customize title view
self.title = NSLocalizedString(@"My Custom Title", @"");
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
titleLabel.text = self.title;
titleLabel.font = [UIFont boldSystemFontOfSize:16];
titleLabel.backgroundColor = [UIColor clearColor];
titleLabel.textColor = [UIColor whiteColor];
[titleLabel sizeToFit];
self.navigationItem.titleView = titleLabel;
[titleLabel release];
}
}
オリエンテーションのサポートにはこのように使用します
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,40)];
[view setBackgroundColor:[UIColor clearColor]];
[view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight ];
UILabel *nameLabel = [[UILabel alloc] init];
[nameLabel setFrame:CGRectMake(0, 0, 320, 40)];
[nameLabel setBackgroundColor:[UIColor clearColor]];
[nameLabel setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin |UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin];
[nameLabel setTextColor:[UIColor whiteColor]];
[nameLabel setFont:[UIFont boldSystemFontOfSize:17]];
[nameLabel setText:titleString];
[nameLabel setTextAlignment:UITextAlignmentCenter];
[view addSubview:nameLabel];
[nameLabel release];
self.navigationItem.titleView = view;
[view release];
self.navigationItem.title=@"Extras";
[self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaNeue" size:21], NSFontAttributeName,[UIColor whiteColor],UITextAttributeTextColor,nil]];
タイトルのフォントサイズを設定するには、次の条件を使用しました。
if ([currentTitle length]>24) msize = 10.0f;
else if ([currentTitle length]>16) msize = 14.0f;
else if ([currentTitle length]>12) msize = 18.0f;
色を設定する適切な方法UINavigationBar
は次のとおりだと思います:
NSDictionary *attributes=[NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor],UITextAttributeTextColor, nil];
self.titleTextAttributes = attributes;
上記のコードは のサブクラスで書かれていますがUINavigationBar
、明らかにサブクラス化しなくても機能します。
新しい iOS 7 のテキスト属性と最新の目標 c を使用してノイズを減らす Alex RR の投稿の更新:
NSShadow *titleShadow = [[NSShadow alloc] init];
titleShadow.shadowColor = [UIColor blackColor];
titleShadow.shadowOffset = CGSizeMake(-1, 0);
NSDictionary *navbarTitleTextAttributes = @{NSForegroundColorAttributeName:[UIColor whiteColor],
NSShadowAttributeName:titleShadow};
[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];
navBar にボタンを挿入するとラベルが移動するという同じ問題 (他の問題と同様) に遭遇した後 (私の場合、日付が読み込まれるときにボタンに置き換えるスピナーがあります)、上記の解決策は機能しませんでした。私にとっては、これが機能し、ラベルを常に同じ場所に維持したものです。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
// this will appear as the title in the navigation bar
//CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44);
CGRect frame = CGRectMake(0, 0, 180, 44);
UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease];
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont boldSystemFontOfSize:20.0];
label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
label.textAlignment = UITextAlignmentCenter;
label.textColor = [UIColor yellowColor];
self.navigationItem.titleView = label;
label.text = NSLocalizedString(@"Latest Questions", @"");
[label sizeToFit];
}
return self;
これは、欠けているものの 1 つです。最善の策は、独自のカスタム ナビゲーション バーを作成し、テキスト ボックスを追加して、その方法で色を操作することです。
このメソッドは appdelegate ファイルで使用でき、すべてのビューで使用できます
+(UILabel *) navigationTitleLable:(NSString *)title
{
CGRect frame = CGRectMake(0, 0, 165, 44);
UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease];
label.backgroundColor = [UIColor clearColor];
label.font = NAVIGATION_TITLE_LABLE_SIZE;
label.shadowColor = [UIColor whiteColor];
label.numberOfLines = 2;
label.lineBreakMode = UILineBreakModeTailTruncation;
label.textAlignment = UITextAlignmentCenter;
[label setShadowOffset:CGSizeMake(0,1)];
label.textColor = [UIColor colorWithRed:51/255.0 green:51/255.0 blue:51/255.0 alpha:1.0];
//label.text = NSLocalizedString(title, @"");
return label;
}
titleTextAttributes バーのタイトル テキストの属性を表示します。
@property(nonatomic, copy) NSDictionary *titleTextAttributes 説明 NSString UIKit Additions Reference で説明されているテキスト属性キーを使用して、テキスト属性ディクショナリ内のタイトルのフォント、テキストの色、テキストの影の色、およびテキストの影のオフセットを指定できます。
提供状況 iOS 5.0 以降で利用可能です。UINavigationBar.h で宣言
[label sizeToFit] を呼び出す必要があります。他のボタンがナビゲーションバーを占有しているときにタイトルビューでラベルが自動的に再配置されるときに奇妙なオフセットを防ぐためにテキストを設定した後。
Erik Bの優れたソリューションをアプリのさまざまなUIVIewCOntrollerでより使いやすくするために、UIViewControllerのカテゴリを追加し、その中で彼のsetTitle:titleメソッドを宣言することをお勧めします。このように、複製することなく、すべてのViewControllerでタイトルの色を変更できます。
ただし、注意すべき点の1つは、[super setTItle:tilte]は必要ないということです。Erikのコードでは、このメソッドを呼び出すには、ViewControllerでself.title= @ "mynewtitle"を明示的に呼び出す必要があります。
@implementation UIViewController (CustomeTitleColor)
- (void)setTitle:(NSString *)title
{
UILabel *titleView = (UILabel *)self.navigationItem.titleView;
if (!titleView) {
titleView = [[UILabel alloc] initWithFrame:CGRectZero];
titleView.backgroundColor = [UIColor clearColor];
titleView.font = [UIFont boldSystemFontOfSize:20.0];
titleView.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
titleView.textColor = [UIColor blueColor]; // Change to desired color
self.navigationItem.titleView = titleView;
[titleView release];
}
titleView.text = title;
[titleView sizeToFit];
}
@終わり
私はiOS 9に以下のコードを使用しており、うまく機能しています。タイトルにも影の色を使用しています。
self.navigationItem.title = @"MY NAV TITLE";
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
self.navigationController.navigationBar.translucent = NO;
NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8];
shadow.shadowOffset = CGSizeMake(0, 1);
[self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], NSForegroundColorAttributeName,
shadow, NSShadowAttributeName,
[UIFont fontWithName:@"HelveticaNeue-Light" size:21.0], NSFontAttributeName, nil]];
これがあなたを助けますように。
ありがとう