iOS 7 - 模态变化的状态栏颜色?

Posted

技术标签:

【中文标题】iOS 7 - 模态变化的状态栏颜色?【英文标题】:iOS 7 - Status bar color on a modal changes? 【发布时间】:2014-06-23 20:07:45 【问题描述】:

任何直接添加到 NavigationController 的 ViewController 都有一个灰色的状态栏,与 NavigationBar 的颜色相匹配。

但是每当我显示一个 Modal 时,状态栏都是白色的,这与我放置在那里的 NavigationBar 不匹配?

我在这里看到了大量的答案,其中大多数都不起作用,而且那些似乎也不是好的解决方案。例如,我不想将每个模式都包装在 UINavigationController 中。

我尝试了以下也被推荐的方法,它完全摆脱了我的状态栏,这不是我想要的。

-(UIStatusBarStyle)preferredStatusBarStyle 
    return UIStatusBarStyleLightContent; 
 

那么这里的神奇解决方案是什么?

【问题讨论】:

没有解决办法吗?很久没问了,还没有被接受的答案? @elsurudo “例如,我不想将每个模式都包装在 UINavigationController 中”我实际上最终这样做了,因为这是我找到的唯一解决方案,如果我不想要查看导航栏,我只是将其隐藏 【参考方案1】:

状态栏颜色取决于视图的顶视图颜色(连接到状态栏的视图)。

如果导航栏连接到状态栏,则状态栏将使用导航栏。

如果导航栏被隐藏,则连接到状态栏的顶视图。状态栏将采用该视图颜色。

因此,如果导航栏不存在,那么您应该更改连接到状态栏的视图的颜色。

希望对您有所帮助。

【讨论】:

【参考方案2】:

在显示模态视图时执行此代码以强制应用程序更改样式。

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

在 Modals UIViewController 中可能是最好的

-(void)viewWillAppear:(BOOL)animated

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

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

【讨论】:

不这样做。我在我的modal的viewDidLoad中调用了它,看起来还是一样,这应该和覆盖preferredStatusBarStyle一样 状态栏还是白色的,里面没有内容。全部空白 这会导致一些非常错误的问题,即在应用程序中的任何位置使用 MPMovieController 时状态栏随机出现/消失。【参考方案3】:

不确定这是否是一个好的解决方案。试试类似的东西怎么样:-

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

以上是关于iOS 7 - 模态变化的状态栏颜色?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7:模态视图控制器状态栏颜色错误,但普通视图控制器正确

模态视图的 iOS7 状态栏字体颜色

如何更改模态视图 iOS 6 上的状态栏

swift iOS中的UINavigation状态栏颜色变化[重复]

在iOS 7中隐藏导航栏时,如何更改状态栏的颜色?

如何在 iOS 7 上更改状态栏背景颜色和文本颜色?