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

alp*_*ter 7 uiimagepickercontroller ios7

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

[[UIApplication sharedApplication] setStatusBarHidden:YES];
Run Code Online (Sandbox Code Playgroud)

我试过了

-(BOOL)prefersStatusBarHidden{ 
  return YES;
}
Run Code Online (Sandbox Code Playgroud)

我试过启动选择器

[self presentViewController:picker animated:NO completion:^{
  [[UIApplication sharedApplication] setStatusBarHidden:YES];
}
Run Code Online (Sandbox Code Playgroud)

而且,有一个状态栏与相机控件重叠.它只在iOS 7中出现.

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

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

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

vox*_*let 17

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

@interface NoStatusBarImagePickerController : UIImagePickerController
@end

@implementation NoStatusBarImagePickerController

- (BOOL)prefersStatusBarHidden {
  return YES;
}

- (UIViewController *)childViewControllerForStatusBarHidden {
  return nil;
}

@end
Run Code Online (Sandbox Code Playgroud)

  • 来自UIImagePickerController上的apple文档:重要:UIImagePickerController类仅支持纵向模式.此类旨在按原样使用,不支持子类化.此类的视图层次结构是私有的,不得修改,但有一个例外.您可以将自定义视图分配给cameraOverlayView属性,并使用该视图显示其他信息或管理相机界面与代码之间的交互. (4认同)
  • 我同意是否覆盖了任何选择器方法,但只有基本的UIViewController行为是自定义的,并且是以预期的方式.对于他自己解释文档的每一个,但我不相信我在精神上违反任何规则,我当然希望Apple的SDK实现在封装方面至少表现得足够好,这是可以接受的. (2认同)

Ale*_*nca 7

试试这个 :

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

在你的appDelegate中.

  • 这个解决方案对我有用,但是你必须在你正在实现UIImagePickerDelegate的类中添加这个UINavigationControllerDelegate方法. (3认同)

alp*_*ter 0

我认为这个问题的答案是“这是 iOS 7 的一个 bug”。这里的方法对我们的情况没有帮助,现在有几个人试图解决这个问题。

我无法说出重现此问题的步骤,但我已经看到足够多的人遇到同样的问题,因此我认为可以肯定地说这实际上是 iOS 7 的错误。大多数人可以通过上面列出的多种方法来解决这个问题。但很少情况下,您无法通过这种方式解决问题。我希望如果你正在读这篇文章,你也不是那些人中的一员。