3

是的,我已经看到了很多关于此的问题,但没有任何内容涉及我的具体问题。

我设法让状态栏变成纯黑色(我想要蓝色,但我很高兴它是纯黑色的而不是透明的)。我做到了这一点

  1. 在 MyApp-Info.plist 添加“基于控制器的状态栏外观”= NO 值
  2. 在 AppDelegate 做 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { [application setStatusBarStyle:UIStatusBarStyleLightContent]; self.window.clipsToBounds =YES; }
  3. 在我viewDidLoad做的if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) { self.edgesForExtendedLayout = UIRectEdgeNone; }

伟大的。

在此处输入图像描述

但是在 UITabBarController 后面它仍然是透明的。我的 tabbarcontroller 中的视图控制器是第一个屏幕截图中同一视图控制器的子类。viewDidLoad并且正在调用相同的代码。

有任何想法吗?

在此处输入图像描述

4

2 回答 2

3

经过几天的折腾,我有了一个解决方案:

1)在 MyApp-info.plist 中设置View controller-based status bar外观NO(如果需要,请添加密钥)

2)把它放在主视图和细节视图控制器中viewDidLoad

self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
self.navigationController.navigationBar.translucent = NO;
self.navigationController.navigationBar.barTintColor = [your background colour];
self.navigationController.navigationBar.tintColor = [color of the text of buttons];

3) 这将使顶栏不透明,因此,在情节提要中,如果您有 uitabbarcontroller,则需要对其进行设置under opaque bars

作为奖励提示:为了使导航栏与其匹配,我在 AppDelegate 中执行以下操作didFinishLaunchingWithOptions

[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundColor:[same color as barTintColor above]];
[[UINavigationBar appearance] setTitleTextAttributes:@{UITextAttributeTextColor:[UIColor whiteColor]}];

我希望这可以帮助别人!

于 2013-09-23T10:12:02.463 回答
2

我想出了类似的问题。要修复它,您不必禁用View controller-based status bar

UITabBarController课堂上,将扩展布局设置为UIRectEdgeNone

self.edgesForExtendedLayout = UIRectEdgeNone;
self.automaticallyAdjustsScrollViewInsets = NO;

然后navigationBar.barTintColor在其他地方设置一些。

子视图控制器中的设置edgesForExtendedLayout不起作用。

于 2014-02-27T07:06:23.803 回答