0

嗨,我正在开发小型 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 控制器和一个导航控制器。难道我做错了什么?需要帮忙。谢谢你 。

4

1 回答 1

3

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

这里有两个想法如何实现你正在寻找的东西:

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

或者,更好的是,将导航控制器子类化,在导航栏上方添加一个 20pt 高度的子视图,然后在 中viewDidLayoutSubviews,正确定位子视图并调整其大小以适应方向。现在你可以给这个视图赋予任何你想要的颜色,它就是状态栏的颜色。

编辑:根据评论,该positionForBar:方法可能不起作用。

于 2014-04-25T04:29:14.967 回答