37

In , how can I hide the programmatically? I am using XCode 4.6.1 () and I want to implement this in XCode itself.

Luke Taylor
  • 8,631
  • 8
  • 54
  • 92
Magesh
  • 685
  • 2
  • 7
  • 15

12 Answers12

72

in iOS7 you should implement in your viewController

- (BOOL)prefersStatusBarHidden {
    return YES;
}
Nicolas Manzini
  • 8,379
  • 6
  • 63
  • 81
33

you can hide status bar to set the key value "View controller-based status bar appearance" NO in plist. This is easiest way.

or You can hide in code by using property statusBarHidden of UIApplication class.

[[UIApplication sharedApplication] setStatusBarHidden:YES];

Swift 3.0

Hide status bar for any particular view controller

override var prefersStatusBarHidden: Bool {
    get {
        return true
    }
}

Hide Status bas across the application

UIApplication.shared.isStatusBarHidden = true

and set the key value "View controller-based status bar appearance" NO in info plist of project.

Anand Mishra
  • 1,093
  • 12
  • 15
18
- (void)viewDidLoad
{
    [super viewDidLoad];
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)])
    {
        [self prefersStatusBarHidden];
        [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
    }
    else
    {
        // iOS 6
        [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
    }
}

// Add this method
- (BOOL)prefersStatusBarHidden {
    return YES;
}
user2826529
  • 179
  • 2
  • It did not work for me. I have used this same but the status bar always shown. Please help.. – Magesh Oct 01 '13 at 07:05
  • 4
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; This will work and there is a property in info.plist where you can hide the status bar. – user2826529 Oct 08 '13 at 15:05
  • After hiding the statusbar, how can it be shown again? Because I want to alter the statusbar visible status programmatically. – echo Oct 21 '13 at 07:29
  • There is no need to perform the selector. – Andras Hatvani Nov 01 '13 at 14:53
  • @AndrasHatvani The question specified using Xcode 4, which means that he doesn't have the iOS 7 API. He uses performSelector to avoid "no method found" warning. – zekel Jan 02 '14 at 20:16
  • @echo See my answer if you still need to do this. – zekel Jan 02 '14 at 20:20
5

To hide for a specific ViewController (and then turn back on) when View controller-based status bar appearance set to NO:

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
}

-(void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
}
capikaw
  • 12,232
  • 2
  • 43
  • 46
3

If you need to hide/show it on a given view controller dynamically you can do something like this.

(Although I recommend just using - (BOOL)prefersStatusBarHidden to return your preference if you don't need it to change.)

// view controller header 
@interface MyViewController : UIViewController  {
    BOOL shouldHideStatusBar;
}
@end


@implementation

- (BOOL)prefersStatusBarHidden {
    return shouldHideStatusBar; // backed by your instance variable
}

- (void)setPrefersStatusBarHidden:(BOOL)hidden {
    shouldHideStatusBar = hidden;

    // Don't call this on iOS 6 or it will crash since the 
    // `setNeedsStatusBarAppearanceUpdate` method doesn't exist
    [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];

    // [self setNeedsStatusBarAppearanceUpdate]; // (if Xcode 5, use this)
}

@end
zekel
  • 9,227
  • 10
  • 65
  • 96
1

In case of iOS >= 7.0 use following code :

Syntax:

// Present in UIViewController of UIKit Frameworks
- (BOOL)prefersStatusBarHidden NS_AVAILABLE_IOS(7_0); // Defaults to NO

Usage:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

In iOS < 7.0 use following code :

Syntax:

// Present in UIApplication of UIKit Frameworks
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_AVAILABLE_IOS(3_2);

Usage:

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
Navnath Godse
  • 2,233
  • 2
  • 23
  • 32
Jayprakash Dubey
  • 35,723
  • 18
  • 170
  • 177
1

Swift 4.1

step1. Set View controller-based status bar appearance in your info.plist to YES

step2. Type some code in your UIViewController, status bar will hide when you present the UIViewController.

private var statusBarIsHidden = false

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    statusBarIsHidden = true
    setNeedsStatusBarAppearanceUpdate()
}
override var prefersStatusBarHidden: Bool {
    return statusBarStatus
}
alex02rt
  • 146
  • 4
0

Try this

[[UIApplication sharedApplication] setStatusBarHidden:YES];
Muhammad Aamir Ali
  • 20,419
  • 10
  • 66
  • 57
0

If anyone wanted the most updated way to do it (Swift 2.1 and latest Xcode 7.2)

  1. Set "View controller based status bar appearance to NO in your info.plist"

  2. UIApplication.sharedApplication().statusBarHidden = true // put inside app delegate somewhere (applicationWill or DidFinishLaunchingWithOptions:

adam88labs
  • 21
  • 3
0

My experience is that you need both the code and the value in the info.plist file in iOS 9 / Xcode 7.3.

Add this to your viewDidLoad method.

[[UIApplication sharedApplication] setStatusBarHidden:YES];

Add this to your info.plist file as a boolean value and set it to NO:

View controller-based status bar appearance
0

If using iOS 9.0+ and Swift. If you want to have status bar hidden in some view controllers but not all - make sure to have View controller-based status bar appearance value in Info.plist set to YES else same parameters will be used across all view controllers.

And override prefersStatusBarHidden in subclass of UIViewController

override var prefersStatusBarHidden: Bool {
    get {
        return true
    }
}

Similar can be done to change preferredStatusBarStyle

override var preferredStatusBarStyle: UIStatusBarStyle {
    get {
        return .lightContent
    }
}
esesmuedgars
  • 139
  • 1
  • 9
0

on swift 4:

    UIApplication.shared.isStatusBarHidden = ..true/false
ingconti
  • 10,876
  • 3
  • 61
  • 48