iPhoneナビゲーションバーのタイトルテキストの色 質問する

iPhoneナビゲーションバーのタイトルテキストの色 質問する

iOS ナビゲーション バーのタイトルの色はデフォルトで白になっているようです。別の色に変更する方法はありますか?

navigationItem.titleView画像を使用するアプローチは知っています。私のデザインスキルは限られており、標準の光沢を取得できなかったため、テキストの色を変更することを好みます。

ご意見をいただければ幸いです。

ベストアンサー1

現代的なアプローチ

最新の方法では、ナビゲーション コントローラー全体に対して、ナビゲーション コントローラーのルート ビューが読み込まれたときに、これを 1 回実行します。

[self.navigationController.navigationBar setTitleTextAttributes:
   @{NSForegroundColorAttributeName:[UIColor yellowColor]}];

ただし、これはその後のビューには影響しないようです。

古典的なアプローチ

ビュー コントローラーごとの古い方法 (これらの定数は iOS 6 用ですが、iOS 7 の外観でビュー コントローラーごとに実行する場合は、同じアプローチで異なる定数を使用する必要があります)。

UILabelとしてを使用する必要があります。titleViewnavigationItem

ラベルには次の内容が記載されている必要があります。

  • 背景色は明瞭にします(label.backgroundColor = [UIColor clearColor])。
  • 太字の20ptシステムフォント(label.font = [UIFont boldSystemFontOfSize: 20.0f])を使用します。
  • アルファ 50% の黒い影 ( label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]) を作成します。
  • テキストの配置も中央揃えに設定する必要があります ( label.textAlignment = NSTextAlignmentCenter(UITextAlignmentCenter古い SDK の場合)。

ラベル テキストの色を任意のカスタム色に設定します。テキストが影に溶け込んで読みにくくならないような色にする必要があります。

私は試行錯誤しながらこれを解決しましたが、私が導き出した値は、結局のところ、Apple が選択したものと異なるにはあまりにも単純すぎます。:)

これを検証したい場合は、このコードをにドロップしてinitWithNibName:bundle:くださいPageThreeViewController.mAppleのNavBarサンプルこれにより、テキストが黄色のラベルに置き換えられます。色を除けば、これは 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;
}

編集: また、以下の Erik B の回答も読んでください。私のコードでは効果を示していますが、彼のコードでは、これを既存のビュー コントローラーに配置するより簡単な方法が提供されています。

おすすめ記事