我想在所有视图中显示我的应用中的状态栏,但只有一个。我试过修改plist中的“状态栏最初是隐藏的”,我试过了:
[[UIApplication sharedApplication] setStatusBarHidden:YES];
那隐藏了酒吧,但留下了一个丑陋的蓝色方框,状态栏就在那里(这不是我视图的一部分,那里没有蓝色)。
我还尝试在Xcode 4.2的“界面构建器”位中更改布局需要全屏和状态栏设置。
有什么建议吗?
编辑 - 解决方案:
我通过包括:
完成了 -(void)viewWillDisappear:(BOOL)animated{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
-(void)viewDidAppear:(BOOL)animated{
[[UIApplication sharedApplication] setStatusBarHidden:NO];
}
在每个我想要状态栏的页面上。
它仍然看起来不稳定和垃圾,因为每次切换视图时都会出现标签栏并重新出现。但是我已经受够了,现在大约5个小时就解决了这个愚蠢的问题,所以这将是必须的。
第二次编辑 -
通过在viewWillAppears中包含setStatusBarHidden = NO来修复波动性。上帝知道一切是如何运作的,但确实如此。
答案 0 :(得分:42)
尝试这一个它将完美运行..
[[UIApplication sharedApplication] setStatusBarHidden:YES];
在XIB中,为状态栏设置了无选项。
适用于iOS 7。
转到info.plist并添加两个属性(如果不存在)。将“状态栏最初隐藏”设置为“是”并将“UIViewControllerBasedStatusBarAppearance”设置为“NO”。这将隐藏您应用的状态栏。
答案 1 :(得分:16)
#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;
}
答案 2 :(得分:8)
如果有人在寻找上述解决方案不起作用的解决方案(并且顶部仍然存在恼人的蓝色20px间隙),请尝试将此放在视图控制器的实现文件上的viewWillAppear中就像要隐藏的状态栏一样。
self.navigationController.navigationBar.frame = CGRectOffset(self.navigationController.navigationBar.frame, 0.0, -20.0);
字面上花了我12个小时左右来修复,这就是解决方案,所以现在我正在传播这个词以防万一其他人有这个恼人的问题。
答案 3 :(得分:7)
Kartik的解决方案对我有用。
[[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。
但是当我第一次实现它时,顶部的烦人“空间”就在那里。我在故事板中选择了View Controller,并按如下方式设置属性: 尺寸:全屏 StatusBar:无 其他一切推断。
我检查了全屏。
Voila,一切都运转正常。
答案 4 :(得分:2)
我知道这是一个老问题,但这些答案都不适合我,所以这就是我在单个viewController中隐藏状态栏的方法
首先在你的parentViewController中你必须设置:
- (UIViewController *)childViewControllerForStatusBarHidden {
if ( hideStatusBarViewController ) {
return hideStatusBarViewController;
}
return nil
}
它仅在创建时返回子视图控制器,否则为nil是默认值。添加hideStatusBarViewController时,必须调用
[self setNeedsStatusBarAppearanceUpdate];
在parentViewController上,此函数强制读取childViewControllerForStatusBarHidden。最后在hideStatusBarViewController中你必须设置
- (BOOL)prefersStatusBarHidden {
return YES;
}
它是唯一适合我的解决方案。我希望它对某人有帮助。
答案 5 :(得分:1)
我建议你采用不同的方法:将该视图插入应用程序的窗口:
YourUIAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate.window insertSubview:self.yourView atIndex:([[appDelegate.window subviews]count])];
这样它会显示在状态栏上
我希望它可以帮到你
答案 6 :(得分:1)
如果您想在单一视图
上隐藏状态栏,则可以使用此解决方案- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setStatusBarHidden:YES];
[self.view sizeToFit];
}
答案 7 :(得分:0)
以下是可能有用的代码片段。当视图加载显示状态栏时,当您离开视图时会再次隐藏它。
-(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];
}
答案 8 :(得分:-1)
[[UIApplication sharedApplication] setStatusBarHidden:BOOL];
就够了,但是:
请务必在离开视图之前将其重新设置为NO
,否则返回的页面可能会在状态栏下显示导航栏。
确保在要隐藏状态栏的视图中设置状态栏隐藏和显示。我在viewDidLoad
方法中关闭了 - 至关重要 - 在viewWillDisappear:animated
方法中重新启用。任何以后你都会遇到麻烦。