Set Status Bar Tint Colour
Asked Answered
M

3

1

I have an tabbed bar application and the status bar tint colour is set to default - so it is always my selected blue colour throughout my app.

However, in one view, I am hiding my Navigation Bar like so:

[self.navigationController setNavigationBarHidden:YES];

This is in the viewWillAppear method and the view is accessible as it is one of the tabs of my app.

The reason I am hiding it, is because I would like to put a toolbar (with about 6 buttons) in its place.

I have set the tint colour of my toolbar, however, the status bar on this view is always black. Is there a way to re-set the status bar for this view, or is there a better way to hide the navigation bar in order to retain the status bar tint colour.

UPDATE I read somewhere that when tinting is set to default, the colour of the status bar will be the colour of the lowest pixel in the header.

I have tried hiding the navigation bar in storyboards and have also tried changing the tint colour to 'Custom' but this also had no effect.

These two screenshots might illustrate my issue. Toggling the navigation bar changes the status bar colour. This is the navigation controller which the view in question is embedded in.

With Navigation Bar - blue status barWithout Navigation Bar - black status bar

Manheim answered 27/11, 2012 at 13:28 Comment(1)
...so you mean hiding navigation bar changes status bar color to black?Dickerson
M
6

Ahh!!! I have a working solution... albeit a very dirty and makeshift solution.

  1. Simply hide the navigation bar in storyboards (As shown in image in question - uncheck Shows Navigation Bar).
  2. Drag a Navigation Bar into the view.
  3. Set it's Alpha to 0 and uncheck User Interaction Enabled - DO NOT MAKE HIDDEN
  4. Make sure the Navigation Bar is on the top - as shown in following image.

    Screen Capture

This way your status bar will pick up the correct colour without showing a Navigation Bar.

Hopefully a more resilient/nicer way to do this will be in a recent Xcode update.

Top Tip: To make a toolbar look like a navigation bar:

  1. Position the toolbar -1 on the Y axis
  2. Create a label (with no text) with a height of 44px, width 320px and position at 0,0. This will be the bottom border for the tab bar. For best results, take a screenshot of a page of your app and use software to get the colour of the border - this is the darkest part of the tab before the shadow begins (use this colour as the background of the label).
Manheim answered 27/11, 2012 at 15:30 Comment(1)
How do I upvote you several times? :) I was going to suggest a navigation bar 1 pixel tall in front of your toolbar; that does work (https://mcmap.net/q/584730/-status-bar-tint-color-changes-to-black-in-ios-6). But your solution, a navigation with an alpha of 0, is something I would never have thought of.Gallopade
D
1

If you are using iOS 6.0, you can set status bar color through plist file. See - How to set status bar tint color on iOS 6?

From iOS 6 release notes;

Status Bar

It is now possible to set status bar tint parameters in your app’s Info.plist file. You might do this to ensure that the status bar color matches your app’s navigation bar color during startup. To set the status bar tint, add the UIStatusBarTintParameters key to your Info.plist file. The value of this key is a dictionary with the appropriate values describing the navigation bar your app has at startup. Inside the dictionary should be the UINavigationBar key, which has a value that is also a dictionary. That dictionary contains the initial navigation bar’s style (with the Style key) and indicates whether it is translucent (with the Translucent key). You can also specify your navigation bar’s tint color (with the TintColor key) or the name of its custom background image (with the BackgroundImage key).

[EDIT]

It seems in iOS 6 the status bar color is automatically determined by the navigation bar color. Before hiding navigation bar can you set the color of navigation bar to your default and see if that makes any difference.

Dickerson answered 27/11, 2012 at 14:49 Comment(1)
I have tried this, but to no avail: [self.navigationController.navigationBar setTintColor:[UIColor redColor]]; [self.navigationController setNavigationBarHidden:YES];Manheim
D
0
Change statusBarStyle of application-
[[UIApplication sharedApplication] 
      setStatusBarStyle:UIStatusBarStyleDefault animated:NO];
Dupuis answered 27/11, 2012 at 13:32 Comment(1)
I thought about this, but it sadly has no effect.Manheim

© 2022 - 2024 — McMap. All rights reserved.