2014-05-07 68 views
3

直接添加到NavigationController的任何ViewController都有一个灰色的状态栏,它与NavigationBar的颜色相匹配。iOS 7 - 模态变化的状态栏颜色?

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

我在这里看到了很多答案,其中大多数都不起作用,而那些看起来并不是很好的解决方案。例如,我不想在UINavigationController中包装每一个模态。

我试过以下这也是建议完全摆脱我的状态栏,这不是我想要的。

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
} 

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

+0

有没有根本就没有一个解决方案?自从你问了一段时间,而且没有被接受的答案? – elsurudo

+0

@elsurudo“例如,我不想在UINavigationController中包含每一个模态”我实际上最终这样做了,因为它是我发现的唯一解决方案,如果我不想看到导航栏,我只是隐藏它 – aryaxt

回答

0

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

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

在情态动词的UIViewController

-(void)viewWillAppear:(BOOL)animated 

在应用中可能是最好的plist你还需要设置

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

+0

不这样做。我在我的模式的viewDidLoad中调用它,并且仍然看起来一样,这应该与重写preferredStatusBarStyle相同 – aryaxt

+0

您需要设置应用程序plist以允许它工作 – Chris

+0

状态栏仍然是白色的,并且它没有内容在里面。全部为空 – aryaxt

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

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

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

如果导航栏被隐藏,那么连接到状态栏的顶视图。该视图颜色将由状态栏拍摄。

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

希望得到这个帮助。

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