在单一视图上隐藏iPhone上的状态栏?
我想在所有视图中显示状态栏,而不是一个视图。 我曾尝试修改“状态栏最初隐藏在”plist,我曾尝试:
[[UIApplication sharedApplication] setStatusBarHidden:YES];
这隐藏了酒吧,但留下一个丑陋的蓝色框状态栏(这不是我的观点的一部分,那里没有蓝色)。
我也尝试改变布局,希望在Xcode 4.2的“接口生成器”位的全屏和状态栏设置。
有什么build议么?
编辑 – 解决scheme的种类:
我已经完成了,包括:
-(void)viewWillDisappear:(BOOL)animated{ [[UIApplication sharedApplication] setStatusBarHidden:YES]; } -(void)viewDidAppear:(BOOL)animated{ [[UIApplication sharedApplication] setStatusBarHidden:NO]; }
在每一个我想要状态栏的页面上。
它仍然看起来不稳定和垃圾,因为标签栏出现,并且每次切换视图时都会重新出现。 但是我已经受够了,现在工作了大约5个小时这个愚蠢的问题,所以这将不得不做。
第二次编辑 –
通过在viewWillAppears中包含setStatusBarHidden = NO来修复震荡。 上帝知道一切如何运作,但它确实如此。
试试这一个它会运行完美..
[[UIApplication sharedApplication] setStatusBarHidden:YES];
而在XIB设置状态栏没有选项。
为iOS 7。
转到info.plist并添加两个属性(如果不存在)。 将“状态栏最初隐藏”设置为“YES”并将“UIViewControllerBasedStatusBarAppearance”设置为“NO”。 这将隐藏您的应用程序的状态栏。
#pragma mark - Hide statusbar -(void)hideStatusBar { #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 // iOS 7.0 or later [self setNeedsStatusBarAppearanceUpdate]; #else // less than 7 [[UIApplication sharedApplication] setStatusBarHidden:YES]; #endif } - (BOOL)prefersStatusBarHidden { return YES; }
如果有人在寻找上述解决scheme无法工作的解决scheme(并且顶部还有一个令人讨厌的蓝色20px空白),请尝试将其放在视图控制器的实现文件的viewWillAppear中,酒吧被隐藏起来。
self.navigationController.navigationBar.frame = CGRectOffset(self.navigationController.navigationBar.frame, 0.0, -20.0);
这真的花了我12个小时左右来解决,这是解决scheme,所以现在我传播的话,以防其他人有这个恼人的问题。
Kartik的解决scheme为我工作。
[[UIApplication sharedApplication] setStatusBarHidden:YES];
我添加到viewWillAppear:
实例方法。
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[UIApplication sharedApplication] setStatusBarHidden:YES]; self.webView.scalesPageToFit = YES; [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.co.uk"]]]; }
我也花了很多时间。 使用Xcode 4.2,iOS5 sim。
但是当我第一次实施它的时候,那个恼人的“空间”就在那里。 我在故事板中select了视图控制器并设置属性,如下所示:大小:全屏状态栏:没有任何其他推断。
我查了想要全屏。
瞧,这一切都很好。
我知道这是一个古老的问题,但这个答案没有一个适合我,所以这是我如何在一个viewController中隐藏状态栏
首先在你的parentViewController中你必须设置:
- (UIViewController *)childViewControllerForStatusBarHidden { if ( hideStatusBarViewController ) { return hideStatusBarViewController; } return nil }
它只在其它情况下返回子视图控制器,否则为默认值。 当你添加你的hideStatusBarViewController时,你必须调用
[self setNeedsStatusBarAppearanceUpdate];
在parentViewController上,这个函数强制读取childViewControllerForStatusBarHidden。 最后在hideStatusBarViewController中,你必须设置
- (BOOL)prefersStatusBarHidden { return YES; }
它是唯一适用于我的解决scheme。 我希望它能帮助别人。
我会build议你一个不同的方法:将该视图插入到应用程序的窗口中:
YourUIAppDelegate *appDelegate = [UIApplication sharedApplication].delegate; [appDelegate.window insertSubview:self.yourView atIndex:([[appDelegate.window subviews]count])];
这样它会显示状态栏
我希望它可以帮助你
如果您想在单个视图中隐藏状态栏,这是一个解决scheme
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[UIApplication sharedApplication] setStatusBarHidden:YES]; [self.view sizeToFit]; }
这是可能有帮助的代码片段。 当视图加载显示状态栏时,当你离开视图时再次隐藏它。
-(void)viewWillAppear:(BOOL)animated { if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: withAnimation:)]) [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade]; else [[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES]; } -(void)viewWillDisappear:(BOOL)animated { if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: withAnimation:)]) [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; else [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; }
[[UIApplication sharedApplication] setStatusBarHidden:BOOL];
就够了,但是:
-
请记住在离开视图之前将其设置为
NO
,否则返回的页面可能会在状态栏下方有导航栏。 -
确保您在隐藏状态栏的视图中设置了状态栏隐藏和显示。 我在
viewDidLoad
方法中closures了,最重要的是在viewWillDisappear:animated
方法中重新开启。 任何后来,你在麻烦。