在一个视图上隐藏iPhone上的状态栏?

时间:2011-11-30 13:36:58

标签: iphone objective-c ios status statusbar

我想在所有视图中显示我的应用中的状态栏,但只有一个。我试过修改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来修复波动性。上帝知道一切是如何运作的,但确实如此。

9 个答案:

答案 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];就够了,但是:

  1. 请务必在离开视图之前将其重新设置为NO,否则返回的页面可能会在状态栏下显示导航栏。

  2. 确保在要隐藏状态栏的视图中设置状态栏隐藏和显示。我在viewDidLoad方法中关闭了 - 至关重要 - 在viewWillDisappear:animated方法中重新启用。任何以后你都会遇到麻烦。