如何在UIImagepickercontroller中隐藏状态栏?

我是iOS开发新手。 我想隐藏状态栏在UIImagePickerController 。 每当我点击“拍照”,就会出现状态栏。 它不隐藏。 我只想在UIImagePickerController隐藏状态栏。

这是我的代码,

 - (IBAction)takePhoto:(UIButton *)sender { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.allowsEditing = YES; picker.sourceType = UIImagePickerControllerSourceTypeCamera; [self presentViewController:picker animated:YES completion:NULL]; } - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [self statusBar:YES]; UIImage *chosenImage = info[UIImagePickerControllerEditedImage]; self.imageView.image = chosenImage; [picker dismissViewControllerAnimated:YES completion:NULL]; } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { [picker dismissViewControllerAnimated:YES completion:NULL]; } -(void)statusBar:(BOOL)status { [[UIApplication sharedApplication] setStatusBarHidden:status]; } 

如何隐藏UIImagePickerController上的状态栏?

我有一个问题,在iOS7我的状态栏不被隐藏。 我编程隐藏,它仍然显示在iOS7中,但是当在iOS6中运行时,状态栏会适当地隐藏。 你必须去plist并添加以下内容:

'基于视图控制器的状态栏外观'并设置为NO。

如果您希望状态栏重新出现在其他视图控制器中,并且只隐藏在特定的VC上,则在VC加载时,将状态栏设置为隐藏YES。 当VC消失时,将状态栏隐藏回NO。

 - (void)viewDidLoad { [super viewDidLoad]; [[UIApplication sharedApplication] setStatusBarHidden:YES]; } 

当控制器消失时,添加以下设置状态栏,使其不再隐藏,并显示在下一个视图上:

 -(void)viewWillDisappear:(BOOL)animated{ [[UIApplication sharedApplication] setStatusBarHidden:NO]; } 

setStatusBarHidden:withAnimation:如果你想要一些stream畅的animation

这对我来说很好:

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

编辑:截至今天,我只是发现,在你的info.plist,如果你只是复制粘贴视图控制器的状态栏外观那里不会工作…你必须击中input一个属性,滚动到最后一个,所以你将有自动完成:查看基于控制器的状态栏外观和一个布尔值,没有。 我尝试了多次,但不能复制。 祝你今天愉快。

我在应用程序中find的解决scheme是:“基于视图控制器的状态栏外观”设置为YES

我没有添加类别:

 //UIImagePickerController+StatusBarHidden.h #import <UIKit/UIKit.h> @interface UIImagePickerController (StatusBarHidden) @end //UIImagePickerController+StatusBarHidden.h #import "UIImagePickerController+StatusBarHidden.h" @implementation UIImagePickerController (StatusBarHidden) -(BOOL) prefersStatusBarHidden { return YES; } -(UIViewController *) childViewControllerForStatusBarHidden { return nil; } @end 

方法childViewControllerForStatusBarHidden很less使用,但图像select器使用它,这就是为什么可能会导致一些麻烦

你也可以实现UIViewController的单身人士,根据其属性返回YES或NO的方法。 然后你的View控制器实现childViewControllerForStatusBarHidden返回上面的单例。 更改单身属性会自动更改应用程序中的状态栏。 还有双子方法childViewControllerForStatusBarStyle


然而,对于2014年,iOS8,请参阅此https://stackoverflow.com/a/18960308/294884

子类UIImagePickerController …我的是V1ImagePickerController …

.m文件看起来像这样:

 #import "V1ImagePickerController.h" @interface V1ImagePickerController () @end @implementation V1ImagePickerController - (void)viewDidLoad { [super viewDidLoad]; if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) // iOS7+ only { self.edgesForExtendedLayout = UIRectEdgeNone; [self prefersStatusBarHidden]; [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)]; } } - (BOOL)prefersStatusBarHidden { return YES; } - (UIViewController *)childViewControllerForStatusBarHidden { return nil; } @end 

childViewControllerForStatusBarHidden是关键!

如果你想从plist禁用状态栏,试试这个:

  1. 状态栏最初是隐藏的:是
  2. 查看基于控制器的状态栏外观:NO

这是iOS 7的必要条件,适合我。 我不知道在iOS7中是否有其他一些技巧。 在你的info.plist中设置这两个标签。

每当你的viewcontroller出现,在viewDidLoad或图像select控制器完成时,使用这个:

  - (void) imagePickerController:(UIImagePickerController *)picker1 didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo { [[UIApplication sharedApplication] setStatusBarHidden:YES]; . . . . } 

上面我使用了Silvertaurus的答案,但是对prefersStatusBarHidden方法进行了一些修改,我认为prefersStatusBarHidden方法非常有帮助:

 //UIImagePickerController+StatusBarHidden.h #import <UIKit/UIKit.h> @interface UIImagePickerController (StatusBarHidden) @end //UIImagePickerController+StatusBarHidden.h #import "UIImagePickerController+StatusBarHidden.h" @implementation UIImagePickerController (StatusBarHidden) -(BOOL) prefersStatusBarHidden { if (self.sourceType==UIImagePickerControllerSourceTypeCamera) { return YES; } else { return NO; } } -(UIViewController *) childViewControllerForStatusBarHidden { return nil; } @end 

当相机不显示时,这将保持图像select器的状态栏。

尝试这个

 [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES]; 

另外检查这个讨论 。

你可以做一个类别:

 @interface UIImagePickerController (HideStatusBar) @end @implementation UIImagePickerController (HideStatusBar) - (BOOL)prefersStatusBarHidden { return YES; } - (UIViewController *)childViewControllerForStatusBarHidden { return nil; } @end 

来源: https : //gist.github.com/psobko/9493473

 -(IBAction)takePhoto:(UIButton *)sender { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.allowsEditing = YES; picker.sourceType = UIImagePickerControllerSourceTypeCamera; [self statusBar:TRUE]; [self presentViewController:picker animated:YES completion:NULL]; } -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *chosenImage = info[UIImagePickerControllerEditedImage]; self.imageView.image = chosenImage; [self statusBar:FALSE]; [picker dismissViewControllerAnimated:YES completion:NULL]; } -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { [self statusBar:FALSE]; [picker dismissViewControllerAnimated:YES completion:NULL]; } -(void)statusBar:(BOOL)status { [[UIApplication sharedApplication] setStatusBarHidden:status]; } 

这可能会帮助你实现你想要的。

如果你想继续使用ViewController-Based Status Bar Appearance试试我在这里发布的答案 。

请试试这个。

UIImagePickerController设置一个委托

•隐藏委托的navigationController中的状态栏:didShowViewController:animated:function。

例如:

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

在我的情况下,我不得不使用presentViewController来显示UIImagePickerViewController(iOS7)。

1-在.plist中将基于视图控制器的状态栏外观设置为NO 2-为UIImagePickerController和viewDidLayoutSubviews创build一个类别:

 - (void)viewDidLayoutSubviews{ [super viewDidLayoutSubviews]; [[UIApplication sharedApplication] setStatusBarHidden:YES]; } 

3-将以下两种方法添加到类别中:

 - (BOOL)prefersStatusBarHidden{ return YES; } - (UIViewController *)childViewControllerForStatusBarHidden{ return nil; } 

我希望这将有所帮助。

我想我解决了这个问题,但没有inheritance和使用plist。 它只隐藏了UIImagePickerController。

这个例子只是提出了照片gallary,但我想你可以应用它在任何地方用相同的方式在uiimagepickercontroller

 - (void)showGallary { [CATransaction begin]; [CATransaction setCompletionBlock:^{ [[UIApplication sharedApplication] setStatusBarHidden:YES]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; }]; imgPicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; [CATransaction commit]; } 

我想一直隐藏状态栏,打开图像select器显示它。 为了再次隐藏起来,下面的工作适用于我从iOS 8开始:

 -(void) imagePickerControllerDidCancel:(UIImagePickerController *)picker { [self dismissViewControllerAnimated:YES completion:^{ [[UIApplication sharedApplication] setStatusBarHidden:YES]; }]; } -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [self dismissViewControllerAnimated:YES completion:^{ [[UIApplication sharedApplication] setStatusBarHidden:YES]; }]; // do stuff with photo } 

我有View controller-based status bar appearance设置为NO