7

我尝试将 Info.plist 'View controller-based status bar appearance' 设置为 NO,我尝试调用

[[UIApplication sharedApplication] setStatusBarHidden:YES];

我试过了

-(BOOL)prefersStatusBarHidden{ 
  return YES;
}

我试过用

[self presentViewController:picker animated:NO completion:^{
  [[UIApplication sharedApplication] setStatusBarHidden:YES];
}

而且,还有一个与相机控件重叠的状态栏。它只存在于 iOS 7 中。

状态栏不会显示在应用程序的其他任何地方。我觉得我在这里遗漏了一个重要的拼图,并且没有多少关于 View Controller 或 UIImagePickerController 的阅读可以帮助我找到所说的拼图。

我希望其他人对这个问题有一点了解。谢谢你。

编辑:我想要的效果是状态栏显示在应用程序中,除了相机选择器和我们使用的一些其他“外部”(电子邮件相关)视图控制器。

4

9 回答 9

17

如果你想保留ViewController-Based Status Bar Appearance,子类 UIImagePickerController 并覆盖prefersStatusBarHiddenand childViewControllerForStatusBarHidden

@interface NoStatusBarImagePickerController : UIImagePickerController
@end

@implementation NoStatusBarImagePickerController

- (BOOL)prefersStatusBarHidden {
  return YES;
}

- (UIViewController *)childViewControllerForStatusBarHidden {
  return nil;
}

@end
于 2013-10-05T16:30:52.610 回答
7

尝试这个 :

- (void)navigationController:(UINavigationController *)navigationController     willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
}

在您的 appDelegate 中。

于 2013-09-23T07:07:51.280 回答
3

从 iOS 7 开始,您需要打开一个额外的设置。在应用程序的 Info.plist 中,添加一行 for View controller-based status bar appearance,一个布尔值,并将其设置为 NO。

于 2013-09-17T19:42:53.577 回答
1

PsychoDad 方法对我有用。我把以下

[[UIApplication sharedApplication] setStatusBarHidden:YES];

进入 UIImagePickerController 子类的 viewWillDisappear 方法。

但是Alexandru Dranca 方法更好,因为这样状态栏根本不会出现!

但是我认为这是IOS 7的一个BUG ...

于 2013-09-25T06:59:29.227 回答
0

“查看基于控制器的状态栏外观”设置为 NO,对我有用。

于 2013-09-23T06:43:35.423 回答
0

你应该离开

-(BOOL)prefersStatusBarHidden{ 
  return YES;
}

并添加这个

-(void)viewWillAppear:(BOOL)animated {
    ...
    [self setNeedsStatusBarAppearanceUpdate];
    ...
}
于 2013-09-26T20:25:26.003 回答
0

我一直在修复 iOS7 的 ToonPAINT 的这个 bug 以及除了在 Info.plist 文件中设置这两个东西之外最终起作用的东西(状态栏最初隐藏 = 否;查看基于控制器的状态栏外观 = 否)

是改变状态栏的样式(即使我根本不希望它显示);仅仅隐藏状态栏是不够的;听起来像一个iOS7错误。

在应用程序委托中添加:

-(void)navigationController:(UINavigationController *)navigationController
 willShowViewController:(UIViewController *)viewController
 animated:(BOOL)animated
  {
  [[UIApplication sharedApplication] setStatusBarHidden:YES];
  [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
  }

{NB .. UIStatusBarStyleBlackTranslucent 已弃用,如果尝试此操作,可能使用 UIStatusBarStyleLightContent}

于 2013-10-01T20:28:41.190 回答
0

我认为这个问题的答案是“这是一个 iOS 7 错误”。在我们的案例中,这里的方法都没有帮助,现在有几个人试图解决这个问题。

我不能说重现这个问题的步骤,但我已经看到足够多的人遇到同样的问题,我认为可以肯定地说这实际上是一个 iOS 7 错误。大多数人可以使用上面列出的多种方法来解决这个问题。但是,很少有这种方法无法解决。我希望,如果您正在阅读本文,您不是其中之一。

于 2014-03-13T23:32:47.927 回答
0

这对我有用:

@implementation ViewController {
    BOOL hideStatusBar;
}

- (void)showCamera {
    UIImagePickerController *camera = [[UIImagePickerController alloc] init];
    camera.modalPresentationStyle = UIModalPresentationCurrentContext;
    camera.sourceType = UIImagePickerControllerSourceTypeCamera;
    camera.delegate = self;

     hideStatusBar = YES;
    [self setNeedsStatusBarAppearanceUpdate];
    [self presentViewController:camera animated:YES completion:nil];
}

-(BOOL)prefersStatusBarHidden{
    return hideStatusBar;
}
于 2015-01-09T21:35:30.140 回答