22

一旦我将 UIImagePickerController 子视图添加到我的视图中,状态栏就会消失并且我无法取回它。有没有办法让状态栏保持可见?

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;


[self.view addSubview:imagePicker.view];

[imagePicker viewWillAppear:YES];
[imagePicker viewDidAppear:YES];

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
4

6 回答 6

29

我也必须在相机应用程序中做同样的事情。显然,除了将状态栏设置为不隐藏之外,您还必须在相机视图使其消失后重置其样式。试试这个:

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
于 2010-09-21T18:24:59.343 回答
15

同时,已接受的答案的解决方案已被弃用。

采用

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

代替

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];

动画参数的有效值为UIStatusBarAnimationNone, UIStatusBarAnimationFade, UIStatusBarAnimationSlide。详细信息可在文档中找到。

于 2013-08-12T14:34:51.193 回答
6

在阅读了这篇文章并发现没有一个答案有效后,我设法通过执行以下操作使其工作:

• 为 UIImagePickerController 设置委托
• 在该委托中,隐藏委托navigationController:didShowViewController:animated:函数中的状态栏。

例如:

-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
}
于 2012-06-16T08:07:38.773 回答
1

将您的 UIImagePicker 添加到根视图(即导航控制器或 TabbarController)

[self.tabBarController presentModalViewController:imagePickerController animated:YES];

之后你可以使用

- (void)imagePickerController:(UIImagePickerController *)picker 
            didFinishPickingImage:(UIImage *)image
                      editingInfo:(NSDictionary *)editingInfo
{
      // do your stuff
     [picker dismissModalViewControllerAnimated:YES];
}

关闭你的 ImagePicker。

于 2010-08-22T16:54:27.983 回答
0

好吧,我知道你不应该这样做,但如果你继承 UIImagePickerController,你可以把它放在你的自定义类中:

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
}
于 2011-02-05T20:09:35.787 回答
0

没有一个解决方案适用于 iOS 5.1.1 Tim 的解决方案适用于 iOS 4.2.1 我能够在 iOS 5.1.1 上解决问题的唯一方法就是这样

-(void)viewDidAppear:(BOOL)animated
{
    double delayInSeconds = 0.01;
    dispatch_time_t popTime = 
            dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [[UIApplicationsharedApplication] setStatusBarHidden:NO];
});

这是非常hacky和错误的。

我花了半天时间寻找解决方案,然后决定只使用 AVFoundation 方法,我花了一个小时来实现使用 AVCaptureSession 和 AVCaptureStillImageOutput 所需的相同基本照片捕获。而且它的效果也更好 - AVCaptureSession 比 UIImagePickerController 启动更快,并且 AVCaptureVideoPreviewLayer 在现代设备上的帧速率比 UIImagePicker 相机预览要好得多。

于 2012-09-02T08:25:12.427 回答