您好我正在开发小型Iphone应用程序,其中我为我的导航栏提供颜色
[self.navigationController.navigationBar setTranslucent:NO];
[self.navigationController.navigationBar setBarTintColor:[UIColor redColor]];
但是因为这个我的状态栏也变成了红色。我想把它变成白色。我尝试了以下方式,但那些不适合我。
在info.plist文件中我设置了View controller-based status bar appearance = "NO"
然后在application:didFinishLaunchingWithOptions:
设置[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
然后在UIViewcontroller中
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
但上述方法对我不起作用。我的导航栏和相同颜色的状态栏。我想将状态栏颜色设置为白色。我的应用程序非常简单,只有一个UIView控制器和一个导航控制器。难道我做错了什么?需要帮忙。谢谢。
答案 0 :(得分:3)
UIStatusBarStyleLightContent
告诉状态栏显示浅色文本,但它仍然是透明的。并且由于导航控制器将其导航栏的位置报告为UIBarPositionTopAttached
,您会看到导航栏在状态栏下方的颜色拉伸效果。
以下是如何实现您所需要的两个想法:
对导航控制器进行子类化,实现 - (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar
并返回UIBarPositionTop
。这使得导航栏不会在状态栏下方拉伸,而是显示导航栏的超级视图(通常为白色)。
或者,更好的是,导航控制器的子类,在导航栏上方添加20pt高度的子视图,并在viewDidLayoutSubviews
中,正确定位子视图并将其调整到方向。现在,您可以为此视图添加任何颜色,它将是状态栏的颜色。
修改:根据评论,positionForBar:
方法可能无效。