iOS 7状态栏与UIImagePickerController上的摄像头控件重叠

时间:2013-09-17 17:53:23

标签: uiimagepickercontroller ios7

我已经尝试将Info.plist'基于视图控制器的状态栏外观'设置为NO,我试过调用

[[UIApplication sharedApplication] setStatusBarHidden:YES];

我试过

-(BOOL)prefersStatusBarHidden{ 
  return YES;
}

我尝试用

启动选择器
[self presentViewController:picker animated:NO completion:^{
  [[UIApplication sharedApplication] setStatusBarHidden:YES];
}

然而,状态栏与相机控件重叠。它只存在于iOS 7中。

状态栏不会显示应用中的任何其他位置。我觉得我在这里错过了一个重要的难题,关于View Controller或UIImagePickerController的阅读量没有帮助我找到所说的拼图。

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

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

9 个答案:

答案 0 :(得分:17)

如果你想保留ViewController-Based Status Bar Appearance,请继承UIImagePickerController并覆盖prefersStatusBarHiddenchildViewControllerForStatusBarHidden

@interface NoStatusBarImagePickerController : UIImagePickerController
@end

@implementation NoStatusBarImagePickerController

- (BOOL)prefersStatusBarHidden {
  return YES;
}

- (UIViewController *)childViewControllerForStatusBarHidden {
  return nil;
}

@end

答案 1 :(得分:7)

试试这个:

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

答案 2 :(得分:3)

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

答案 3 :(得分:1)

PsychoDad方法适合我。我把以下

[[UIApplication sharedApplication] setStatusBarHidden:YES];

进入UIImagePickerController子类的方法viewWillDisappear。

Alexandru Dranca method更好,因为这样状态栏根本不显示!

但是我觉得这是IOS 7的BUG ......

答案 4 :(得分:0)

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

答案 5 :(得分:0)

你应该离开

-(BOOL)prefersStatusBarHidden{ 
  return YES;
}

并添加此

-(void)viewWillAppear:(BOOL)animated {
    ...
    [self setNeedsStatusBarAppearanceUpdate];
    ...
}

答案 6 :(得分:0)

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

是改变状态栏的风格(即使我根本不想显示它);仅隐藏状态栏是不够的;听起来像iOS7的bug。

在app delegate中添加:

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

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

答案 7 :(得分:0)

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

我无法说出重现这一点的步骤,但我已经看到有相同问题的人,我认为可以说这实际上是一个iOS 7个bug。大多数人都可以使用上面列出的多种方法解决此问题。但很少,你可以通过这种方式修复它。我希望如果你正在读这篇文章,你也不是那些人之一。

答案 8 :(得分: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;
}