In ios7, how can I hide the statusbar programmatically? I am using XCode 4.6.1 (ios6.1) and I want to implement this in XCode itself.
12 Answers
in iOS7 you should implement in your viewController
- (BOOL)prefersStatusBarHidden {
    return YES;
}
 
    
    - 8,379
- 6
- 63
- 81
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.
 
    
    - 1,093
- 12
- 15
- 
                    6This doesn't work on iOS 7. The correct answer is by @user2826529 – Vibhor Goyal Oct 10 '13 at 23:05
- 
                    7Works for me. Ensure you set the property he mentions in the plist appropriately. – groomsy Jan 11 '14 at 17:04
- 
                    Far the best solution. Forget all the stuff above. Apple made it way too complicated. – Teddy Apr 19 '15 at 12:17
- 
                    Override code works perfectly in iOS 13, Xcode 11.3, Swift 5. UIApplication.shared.isStatusBarHidden is deprecated. – Wayne Henderson Jun 23 '20 at 00:28
- (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;
}
 
    
    - 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
- 
                    
- 
                    @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
- 
                    
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];
}
 
    
    - 12,232
- 2
- 43
- 46
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
 
    
    - 9,227
- 10
- 65
- 96
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];
 
    
    - 2,233
- 2
- 23
- 32
 
    
    - 35,723
- 18
- 170
- 177
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
}
 
    
    - 146
- 4
Try this
[[UIApplication sharedApplication] setStatusBarHidden:YES];
 
    
    - 20,419
- 10
- 66
- 57
If anyone wanted the most updated way to do it (Swift 2.1 and latest Xcode 7.2)
- Set "View controller based status bar appearance to NO in your info.plist" 
- UIApplication.sharedApplication().statusBarHidden = true // put inside app delegate somewhere (applicationWill or DidFinishLaunchingWithOptions: 
 
    
    - 21
- 3
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
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
    }
}
 
    
    - 139
- 1
- 9
on swift 4:
    UIApplication.shared.isStatusBarHidden = ..true/false
 
    
    - 10,876
- 3
- 61
- 48
- 
                    Setter for 'isStatusBarHidden' was deprecated in iOS 9.0: Use -[UIViewController prefersStatusBarHidden] – Abdullah Umer May 30 '19 at 21:35
 
    