3

NavigationController に直接追加された ViewController には、NavigationBar の色と一致する灰色のステータス バーがあります。

しかし、モーダルを表示するたびにステータス バーが白くなり、そこに配置した NavigationBar と一致しませんか?

私はここでたくさんの答えを見てきましたが、それらのほとんどはうまくいかず、うまくいかないものは良い解決策ではないようです. たとえば、すべてのモーダルを UINavigationController 内にラップしたくはありません。

ステータスバーを完全に取り除くことも推奨されている次のことを試しましたが、それは私が望んでいるものではありません。

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
} 

では、ここでの魔法の解決策は何ですか?

4

4 に答える 4

4

ステータスバーの色は、ビュー(ステータスバーに接続されているビュー)のトップビューの色に依存します。

ナビゲーション バーがステータス バーに接続されている場合、ステータス バーはナビゲーション バーを受け取ります。

ナビゲーション バーが非表示の場合、ステータス バーに接続されているトップ ビュー。そのビューの色はステータス バーで使用されます。

したがって、ナビゲーション バーがない場合は、ステータス バーに接続されているビューの色を変更する必要があります。

この助けを願っています。

于 2014-05-07T04:37:25.077 に答える
0

モーダル ビューを表示するときにこのコードを実装して、アプリケーションのスタイルを強制的に変更します。

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

おそらくモーダルUIViewControllerで最高です

-(void)viewWillAppear:(BOOL)animated

アプリケーションplistでは、設定する必要もあります

コントローラー ベースのステータス バーの外観を表示する: いいえ

于 2014-05-07T02:50:50.900 に答える
0

これが良い解決策かどうかはわかりません。次のようなものを試してみてはどうですか:-

-(void)displayModal{
  AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,320, 20)];
  view.backgroundColor=[UIColor grayColor];
  [delegate.window.rootViewController.view addSubview:view];
  [delegate.window makeKeyAndVisible];
}

-(void)dismissModal{
  AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,320, 20)];
  view.backgroundColor=[UIColor whiteColor];
  [delegate.window.rootViewController.view addSubview:view];
  [delegate.window makeKeyAndVisible];
}
于 2014-05-07T03:42:26.467 に答える