如何在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禁用状态栏,试试这个:
- 状态栏最初是隐藏的:是
- 查看基于控制器的状态栏外观: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