I recently made a change to my project (Adding SWRevealController and Removing my TabbarController), and all of a sudden my status bar won't hide.
I have tried the following solutions:
Hiding via IB Hiding in my base view controller using
(BOOL)prefersStatusBarHidden
Hiding using this code in viewdidload.
[self prefersStatusBarHidden];
[self performSelector:#selector(setNeedsStatusBarAppearanceUpdate)];
Adding View controller-based status bar appearance set to NO to the plist file.
In your apps plist file add a row call it "View controller-based status bar appearance" and set it to NO.
You can hide the status bar in your project General Settings.
Click on YourApplication Target. Click on General Tab.
select Hide During Application Launch option in Deployment Info Section.
I am adding a screenShot for your convenience.
Your Project provide itself the option of hiding the status bar so why to add the same property in the .plist file.
Enjoy Coding...!!!!
try this method
- (BOOL)prefersStatusBarHidden {
return YES; }
I am not 100% convinced, but the problem seemed to resolve when I added "Status bar is initially hidden" = YES to my PLIST file. I don't understand why, but it seems to have done the trick.
Related
I have app compatible with iPad and iPhone in Swift, supporting iOS 7 and 8, using XCode 6.4. Now I made app structured as master-detail control and set in split controller status bar to be light (white). In Storyboard, all controllers display white status bar (master, detail, navigation controllers...) but nor in simulator nor in iPhone / iPad is white but black!
I tried in each controller and its navigator controller to set light status bar. Tried in Master view controller to set it. Tried to add in plist option that allows me setting up per view controller (note that I do not want to control status bar color per controller but to set global for the app). Also tried to set override function for status bar style and even reload function in viewDidLoad func. And nothing worked.
I am really stuck here; I thought just set in split control light status bar and everywhere else it inherits it (and that's how it indeed looks in stoyboard). So what am I missing? Can anyone help me out or give me some hints or directions in further investigation?
Here is demo code: https://goo.gl/U3Ynbc
Many thanks in advance!
In your Info.plist, add the "View controller-based status bar appearance" to YES.
Then, in your view controller subclass, override this method:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
Ok found it.
In plist set "View controller-based status bar appearance" to NO and in appDelegate.swift in func application before return true add following line:
splitViewController.navigationController?.navigationBar.tintColor = UIColor.whiteColor()
having had the same experience as the questioner (seeing the statusBar foreground white in the simulator after having set the values in the .storyboard to "Light Content", and having tried changing this in several places for an app that uses a splitView), i discovered upon inspecting the XML of the storyboard that these were "simulated metrics".
when i added the value UIStatusBarStyle to my Info.plist, and set it to UIStatusBarStyleLightContent (which was not one of the options presented), then ran, the status bar style appeared correctly. (and that was after deleting all of the simulated metrics changes i had placed in the .storyboard file).
If you want to set status bar style, application level then set UIViewControllerBasedStatusBarAppearance to NO in your .plist file.
if you wan to set status bar style, at view controller level then follow these steps:
Set the UIViewControllerBasedStatusBarAppearance to YES in the .plist file, if you need to set status bar style at UIViewController level only.
In the viewDidLoad add function - setNeedsStatusBarAppearanceUpdate
override preferredStatusBarStyle in your view controller.
-
override func viewDidLoad() {
super.viewDidLoad()
self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Set value of .plist according to status bar style setup level.
I've tried all the solutions I can find including those in: setStatusBarHidden is deprecated in iOS 9.0 but none of them work with my application.
It is a simple, single view application. There is a Navigation bar with a single button on it which the status bar should show on top of.
In my .plist:
Status bar is initially hidden: NO
Status bar style: UIStatusBarStyleLightContent
View Controller based status bar appearance: NO
Changing any of these doesn't seem to make any difference at all. I have the status bar style "Hide during application launch" option checked as I don't want it to appear on the splash screen.
I have:
- (BOOL)prefersStatusBarHidden
{
return NO;
}
-(UIStatusBarStyle)preferredStatusBarStyle
{
NSLog(#"style");
return UIStatusBarStyleLightContent;
}
and setNeedsStatusBarAppearanceUpdate which are definitely all called when the view loads in my ViewController.
The view is established in a .storyboard, but many of the fields are manipulated in the ViewController.m as well. The value assigned to the status bar in the simulated metrics doesn't seem to have any effect either.
I need my status bar to be hidden during the launch screen and visible on the viewController. Please help me find a solution that doesn't use the deprecated setStatusbarHidden!
EDIT:
I still haven't solved this, and I surely can't be the only one with this problem! It happens in both apps that I have written.
I've just been trying to solve the same problem, I don't know why the setStatusBarHidden and setStatusBarStyle have been deprecated as the new methods are not at all intuitive.
To hide the status bar on launch I have these settings in my plist:
View controller-based status bar appearance: YES
Status bar is initially hidden: YES
Then to show the status bar after launch I have in my view controller:
- (BOOL)prefersStatusBarHidden {
return NO;
}
-(UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
This still didn't work until I found this answer https://stackoverflow.com/a/19365160/488611. So in viewDidLoad I also set the navigation bar style:
self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;
Which makes absolutely no sense, but works.
you can use
application.statusBarHidden=YES;
in AppDelegate.m
didFinishLaunchingWithOptions
In my mind, you should change the value of UIViewControllerBasedStatusBarAppearance.
Set the value file .plist of project a is
UIViewControllerBasedStatusBarAppearance = NO
and check in file AppDelegate and set the code
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Hope my solution can be solved your problem.
OK, I totally misunderstood your question. Here's the correct answer.
Add the below value to you 'info.plist'.
Status bar is initially hidden : YES
View Controller based status bar appearance : YES
On UIViewControllers which you want to show status bar
- (BOOL)prefersStatusBarHidden {
return NO;
}
That's all.
I am not an expert on this, but I played with these settings for some time and came to the following conclusions.
General/Deployment Info:
Status Bar Style: Default (black), Light
Hide status bar (checkbox)
Both change the status bar on the launch screen only.
Note that if you take a screen shot to create this image and the screen shot included a status bar, it will appear that the device is setting the status bar even if you have checked the Hide status bar checkbox! I was tricked by this for a while before I finally thought to look at the launch image itself, and there was a status bar in the photo, so setting Hide never seemed to work even though it really was working. I removed the status bar from the images themselves using Photoshop, and the launch status bars functioned as expected after that.
Info/Custom iOS Target Properties (these change the values in the PLIST, so you could change them in either place):
Status Bar Is Initially Hidden: Yes/No
Status Bar Style: Gray (default), Transparent Black, Opaque Black
View Controller based status bar appearance : Yes/No
If you set Status Bar Is Initially Hidden to No, then you will have the status bar on your View Controller like you wanted. If you want to hide the status bar on your View Controller, you have to set Status Bar Is Initially Hidden to Yes AND set View Controller based status bar appearance to No.
Attributes Inspector for the View Controller/Simulated Metrics
Status Bar: None, Inferred, Default, Light, Black (deprecated)
This seems to have no effect on anything except the appearance of the view controllers in the StoryBoard but NOT in the simulator.
Summary: To answer your question, under General Deployment Info, check the checkbox that says Hide Status Bar. This will hide the status bar on the launch screen. Make certain that your image for the launch screen does NOT have a picture of a status bar in it. None of the settings in the StoryBoard or in the Target seems to turn off the view controller's status bar, so it seems that it will stay on like you wanted. However, I did not test any of the programmatic settings; I think that you should not do any of those, and it will work the way you want.
I am trying to remove the status bar from my app when moving between views in a UINavigationController.
I have a UINavigationController that has the status bar removed. I then select an image using UIImagePickerController, I think it is this that is resetting the status bar appearance.
After selecting the UIImage I push another view and present the image, the problem is that the status bar has reappeared.
I have tried a number of approaches including calling prefersstatusbarhidden on both views without without any luck.
Any ideas how to remove the status bar?
Thanks
If using iOS8, add
-(BOOL)prefersStatusBarHidden{
return YES;
}
to your view controller. You will need to add this to each view controller as required.
You could alternatively specify a value for the key View controller-based status bar appearance in info.plist to specify your status bar preferences app-wide.
Try hiding the status bar manually using this
[[UIApplication sharedApplication] setStatusBarHidden:YES];
Status bar is initially hidden in Info.plist with "Status bar is initially hidden" set to YES and "View controller-based status bar appearance" set to NO.
But when I present a QlPreviewController, after two taps to document to make toolbar disappear and appear again, status bar appears in application too.
Any idea how to prevent this from happening?
In your Info.plist file, set UIViewControllerBasedStatusBarAppearance as true. Then in all view controllers that you want to hide the status bar add the following code:
- (BOOL)prefersStatusBarHidden {
return YES;
}
By doing this and create a sub class of QLPreviewController I was able to hide the status bar, even after returning from full screen state.
I'm having trouble hiding the status bar with my CardIOPaymentViewController. None of my other views display the status bar. I'm using the Card.io SDK in iOS7 and it presents fine modally - just that the status bar is always shown with this view. My info.plist has:
Status bar is initially hidden = YES
View controller-based status bar appearance = NO
and I've checked the Hide During Application Launch option in the Deployment Info Section.
I've tried:
self.keepStatusBarStyle = YES;
I've also made sure my CardIOPaymentViewController controller has (which I didn't need for my other view controllers):
-(BOOL)prefersStatusBarHidden {
return YES;
}
Any suggestions or similar experiences?
#rizjoj I believe that I have now identified and fixed the problem -- the CardIOPaymentViewController wasn't respecting the "View controller-based status bar appearance" setting.
But before I post an official update, I'd like to send you the updated SDK to test. My email address is in my profile; could you get in touch?