web-dev-qa-db-ja.com

iOS 7でステータスバーのコンテンツの色を白に設定する方法

私のアプリの背景色は黒です。 iOS 7では、ビュー全体がステータスバーの下にあるため、ステータスバーのコンテンツを区別するのは困難です。それでは、ステータスバーのコンテンツの色を白に変更する方法は?

preferredStatusBarStyleおよび他のいくつかの方法を試しましたが、失敗しました。

65
Kjuly
  1. info.listファイルで、「コントローラーベースのステータスバーの外観を表示」をNOに設定します。
  2. インサート

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    

    appDelegate.mの-application:didFinishLaunchingWithOptions:に。


UIStatusBarStyleDefaultはステータスバースタイルのデフォルト値であり、代わりに黒のコンテンツが表示されます。 UIStatusBarStyleBlackTranslucentUIStatusBarStyleBlackOpaqueの両方は、iOS 7.0では非推奨です。


IOS 9の更新:

@ ZakariaDarwish が言及されているように、メソッド-setStatusBarStyleはiOS 9で非推奨になりました(注:元の質問はiOS 7でずっと前に尋ねられましたが、現在はサポートしていません。以下の新しいソリューションはiOS 9で動作するため、ここで更新してください。)

そのため、(少なくとも現時点では)唯一の方法は、View Controllerに-preferredStatusBarStyleを実装することです(「View Controllerベースのステータスバーの外観」を忘れずに設定することを忘れないでください) to YES)。

-setNeedsStatusBarAppearanceUpdateまたは-preferredStatusBarStyleで値が変更されると、UIViewControllerのインスタンスメソッド-prefersStatusBarHiddenを呼び出すことができます。

また、2つのメソッド-childViewControllerForStatusBarStyle-childViewControllerForStatusBarHiddenがあり、必要に応じて子View Controllerから優先スタイルを返します。

e.g。、以下のメソッドを使用した場合

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

前にステータスバーのスタイルを切り替えるには、以下のコードサンプルを使用できます

- (void)shouldChangeStatusBarStyleToLightContent:(BOOL)toLightContent
                                        animated:(BOOL)animated
{
  _shouldChangeStatusBarStyleToLightContent = toLightContent;
  if (animated) {
    [UIView animateWithDuration:.3f animations:^{ [self setNeedsStatusBarAppearanceUpdate]; }];
  } else {
    [self setNeedsStatusBarAppearanceUpdate];
  }
}

- (UIStatusBarStyle)preferredStatusBarStyle
{
  return (_shouldChangeStatusBarStyleToLightContent ? UIStatusBarStyleLightContent : UIStatusBarStyleDefault);
}

この更新されたソリューションを今すぐ。

190
Kjuly

* -Info.plistファイルで:

  1. 「コントローラーベースのステータスバーの外観を表示」を「いいえ」に設定します
  2. 「ステータスバーのスタイル」をUIStatusBarStyleLightContentに設定します

または、ターゲットの「一般」タブでステータスバーのスタイルを「黒の不透明」または「黒の半透明」に指定できます(Xcode 5.0.1で)。ただし、これらは廃止された値です。

68
Satachito

私はこれをメインコントローラーで使用します:

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}
26
Denis Kozhukhov

これらの2つのキーをinfo.plistに配置します

enter image description here

14
NaXir

ここで、ステータスバーの色を設定するための短くて簡単な解決策を白

1)最初にこの行View controller-based status bar appearanceを.plistファイルにコピーし、ブール値NOを設定します。

2)AppDelegate.mファイルにdidFinishLaunchingWithOptionsファイルを貼り付けます

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
[[UIApplication sharedApplication] setStatusBarHidden:NO];

または.plistに追加

enter image description here

9
Hardik Thakkar

iOS 9(非推奨の警告回避策)

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
6
    #ifdef __IPHONE_7_0
    # define STATUS_STYLE UIStatusBarStyleLightContent
    #else
    # define STATUS_STYLE UIStatusBarStyleBlackTranslucent
    #endif

    [[UIApplication sharedApplication] setStatusBarStyle:STATUS_STYLE animated:YES];
5

アプリケーションがView Controllerごとに異なるステータスバーのコンテンツの色を持っている場合、推奨される方法は実装されます

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

アプリケーション全体でバーのコンテンツの色をグローバルに変更する必要がある場合は、AppDelegateのdidFinishLaunchingWithOptionsメソッドに次のコード行を追加します

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        UIApplication.shared.statusBarStyle = .lightContent
        return true
    }

アプリケーションがデフォルトのUIViewControllerベースのステータスバーシステムを使用している場合、statusBarStyleの設定は何もしません。このため

info.listファイルで「View Controller-based status bar Appearance」をNOに設定

5

これはそこにあったからです。 UINavigationControllerを使用している場合、これをView ControllerのviewDidLoadメソッドにスローできます。

self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;
4
Shawn

Swift 3でプログラムで実行するには、View Controllerの任意の場所でこれを試してください。

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
  }

また、plistキーの[コントローラーベースのステータスバーの表示]を[はい]に設定します。

2
smileBot