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];

可能是 Modals UIViewController 中最好的

-(void)viewWillAppear:(BOOL)animated

在应用程序列表中,您还需要设置

查看基于控制器的状态栏外观:否

于 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 回答
0

尝试在导航控制器的视图上设置背景颜色:

let navController = UINavigationController(rootViewController: yourController)
navController.view.backgroundColor = UIColor.blue

// If you also want to set the navigation bar background color:
navController.navigationBar.backgroundColor = UIColor.blue
于 2017-08-14T16:19:58.570 回答