iOSナビゲーションバーのタイトルの色は、デフォルトでは白のようです。それを別の色に変更する方法はありますか?
navigationItem.titleView
画像を使ったアプローチを意識しています。私のデザインスキルは限られていて、標準の光沢を得ることができなかったため、テキストの色を変更することを好みます。
どんな洞察もいただければ幸いです。
iOSナビゲーションバーのタイトルの色は、デフォルトでは白のようです。それを別の色に変更する方法はありますか?
navigationItem.titleView
画像を使ったアプローチを意識しています。私のデザインスキルは限られていて、標準の光沢を得ることができなかったため、テキストの色を変更することを好みます。
どんな洞察もいただければ幸いです。
回答:
ナビゲーションコントローラー全体の最新の方法...ナビゲーションコントローラーのルートビューが読み込まれたときに、これを1回実行します。
[self.navigationController.navigationBar setTitleTextAttributes:
@{NSForegroundColorAttributeName:[UIColor yellowColor]}];
ただし、これは以降のビューでは効果がないようです。
古い方法、ビューコントローラーごと(これらの定数はiOS 6用ですが、iOS 7の外観でビューコントローラーごとに実行する場合は、同じアプローチが必要ですが、定数は異なります)。
あなたは使用する必要がある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が選択したものではないため、結局は単純すぎます。:)
あなたはこれを確認したい場合は、にこのコードをドロップinitWithNibName:bundle:
でPageThreeViewController.m
のAppleのナビゲーションバーのサンプル。これにより、テキストが黄色のラベルに置き換えられます。これは、色を除いて、Appleのコードによって生成されたオリジナルと見分けがつかないはずです。
- (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;
}
編集:また、以下のエリックBの答えを読んでください。私のコードは効果を示していますが、彼のコードはこれを既存のビューコントローラーの適切な場所にドロップする簡単な方法を提供します。
sizeWithFont:
と、標準ラベルの自動配置動作が魔法のように機能します。
私はこれがかなり古いスレッドであることを知っていますが、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]};
UITextAttributeTextColor
しNSForegroundColorAttributeName
ます。魅力的な作品!
self.navigationController.navigationBar.tintColor
がうまくいきませんでした。これはしました。
スティーブンフィッシャーの答えに基づいて、私はこのコードを書きました:
- (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をチェックアウトして、設定可能なさまざまなテキストプロパティを確認してください。
IOS 7および8では、タイトルの色を変更して緑色とすることができます
self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor greenColor] forKey:NSForegroundColorAttributeName];
self.navigationController!.navigationBar.titleTextAttributes = NSDictionary(object: UIColor.whiteColor(), forKey: NSForegroundColorAttributeName) as [NSObject : AnyObject]
self.navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
質問を最新の状態に保つために、Alex RRソリューションを追加しますが、Swiftでは次のようにします。
self.navigationController.navigationBar.barTintColor = .blueColor()
self.navigationController.navigationBar.tintColor = .whiteColor()
self.navigationController.navigationBar.titleTextAttributes = [
NSForegroundColorAttributeName : UIColor.whiteColor()
]
結果は次のとおりです。
titleTextAttributes
のみ
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
iOS 5以降、titleTextAttributeディクショナリ(UInavigationコントローラークラスリファレンスの定義済みディクショナリ)を使用して、ナビゲーションテキストバーのタイトルテキストの色とフォントを設定する必要があります。
[[UINavigationBar appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor blackColor],UITextAttributeTextColor,
[UIFont fontWithName:@"ArialMT" size:16.0], UITextAttributeFont,nil]];
Swiftバージョン
私はあなたたちのほとんどがObjective_Cバージョンの答えを提示したことを発見しました
必要な人のために、Swiftを使用してこの機能を実装したいと思います。
ViewDidload
1. NavigationBarの背景を色にする(例:青色)
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」をクリックして、クラスを入力し、keyNameと必要なオブジェクトタイプを表示できます)
お役に立てれば幸いです!:D
以下のコードを、ビューコントローラーのviewDidLoadまたはviewWillAppearメソッドで使用します。
- (void)viewDidLoad
{
[super viewDidLoad];
//I am using UIColor yellowColor for an example but you can use whatever color you like
self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]};
//change the title here to whatever you like
self.title = @"Home";
// Do any additional setup after loading the view.
}
短くて甘い。
[[[self navigationController] navigationBar] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor]}];
これはスティーブンスに基づく私のソリューションです
本当の違いは、テキストの長さに応じて位置を調整するためにいくつかの処理を入れたことです。Appleが行う方法と似ているようです。
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の値を調整することができます
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];
}
}
これはかなり古いスレッドですが、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;
これは私にとってSwiftで機能します:
navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]
navigationController?.navigationBar.titleTextAttributes = { if let currentAttributes = navigationController?.navigationBar.titleTextAttributes { var newAttributes = currentAttributes newAttributes[NSForegroundColorAttributeName] = navigationTintColor return newAttributes } else { return [NSForegroundColorAttributeName: navigationTintColor]}}()
self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : UIColor.redColor};
Swift 4&4.2バージョン:
self.navigationController.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.green]
新しい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];
私は色を設定する適切な方法UINavigationBar
は次のとおりです:
NSDictionary *attributes=[NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor],UITextAttributeTextColor, nil];
self.titleTextAttributes = attributes;
上記のコードはのサブクラスでありUINavigationBar
、サブクラス化なしでも機能します。
[UINavigationBar appearance]
そこにタイトルテキスト属性を使用および設定できることは注目に値します(サブクラス化UINavigationBar
に関連する巧妙さ、望ましい解決策を考えると)。
オリエンテーションサポートにはこのように使用します
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];
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;
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;
}