在旧项目中保留黑色状态栏

时间:2015-04-22 22:08:40

标签: ios objective-c iphone ios8

我有一个"旧项目",并修改它以支持iOS8。 在app状态栏中有黑色。

我将View controller-based status bar appearance设置为NO,状态栏样式设置为Info.plist中的黑色不透明。

以下是AppDelegate.m文件的一部分:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
      application.statusBarStyle = UIStatusBarStyleLightContent;
    }

    application.statusBarHidden = NO;

   UIImage *navBarImage = [[UIImage imageNamed:@"navigation-bar"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 9, 0, 9)];

   [[UINavigationBar appearance] setBackgroundImage:navBarImage forBarMetrics:UIBarMetricsDefault]; 

所以我希望所有控制器上都有白色的黑色状态栏。

它适用于大多数情况。但是当我推动一个新的VC时,它会隐藏导航栏,它会改变颜色,并且在启用导航栏时工作正常。

错误的结果:(当self.navigationController.navigationBarHidden = YES;

Wrong results, status bar translucent and has white color

这是我得到的,但导航栏没有隐藏:

Correct results,but with navigation bar visible, status bar has black color

我实际上并不明白,导航栏的存在会影响状态栏的颜色(样式)。

当使用隐藏的导航栏显示VC(推入导航堆栈)时,如何在iOS7(8)上将状态栏设置为黑色?

1 个答案:

答案 0 :(得分:1)

创建一个视图,将其放在状态栏所在的位置,并将其背景颜色设置为所需的颜色。例如:

UIView *statusBarView = [[UIView alloc]initWithFrame:CGRectMake(0, 0,
                        [UIApplication sharedApplication].statusBarFrame.size.width,
                        [UIApplication sharedApplication].statusBarFrame.size.height)];
statusBarView.backgroundColor  =  [UIColor blackColor]; // Set color
[self.view addSubview:statusBarView];