2014-04-25 112 views
0

您好我正在开发中,我给颜色我的导航栏这样设置状态栏的颜色在iPhone

[self.navigationController.navigationBar setTranslucent:NO];  
[self.navigationController.navigationBar setBarTintColor:[UIColor redColor]]; 

但正因为如此我的状态栏也成为红色小的iPhone应用程序。我想把它改成白色。我试图按照以下方式,但那些不适合我。

在Info.plist文件

我设置

然后在application:didFinishLaunchingWithOptions:在UIViewController中

- (UIStatusBarStyle)preferredStatusBarStyle 
{ 
    return UIStatusBarStyleLightContent; 
} 

但上述方法来设置[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

然后是不是为我工作。我的导航栏和状态栏颜色相同。我想让状态栏的颜色变成白色。我的应用程序非常简单,只有一个带有一个导航控制器的UIView控制器。难道我做错了什么?需要帮忙。谢谢 。

回答

3

UIStatusBarStyleLightContent告诉状态栏中显示浅色文字,但它仍然是透明的。并且由于导航控制器将其导航栏的位置报告为UIBarPositionTopAttached,因此您会看到导航栏在状态栏下拉伸的效果。

这里有两个想法如何实现你在找什么:

子类导航控制器,实现 - (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar并返回 UIBarPositionTop。这使得导航栏不会伸展到状态栏下方,而是会显示导航栏的超级视图(通常为白色)。

或者,更好的,子类导航控制器,添加导航栏以上20pt高度的子视图,和在viewDidLayoutSubviews,位置和正确地调整子视图的取向。现在,您可以为此视图提供任何颜色,并且它将是状态栏的颜色。

编辑:根据评论,positionForBar:方法可能无法正常工作。

+0

感谢您的重播。如您所说,我创建了自定义导航控制器并实现了方法。该方法返回UIBarPositionTop。在故事板中,我将该课程设置为我的导航控制器。但仍显示我与导航栏颜色相同的状态。 – nilkash

+0

在方法中放置一个断点并查看它是否被调用。可能系统做了一些迂回的事情,而不是调用方法。 –

+0

是的,它被召唤。我检查了它。但问题仍然存在。在plist文件中,我把视图控制器基本状态栏外观属性,但仍然保持相同。需要帮忙。感谢您的重播 – nilkash