如何在UIImagepickercontroller中隐藏状态栏?

Sha*_*war 31 iphone objective-c statusbar ios ios7

我是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];
}
Run Code Online (Sandbox Code Playgroud)

如何隐藏状态栏UIImagePickerController

Ale*_*nca 47

这对我很好:

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

编辑:截至今天我刚刚发现,在你的info.plist,如果你只是复制粘贴视图控制器为基础的状态栏的外观也将无法正常工作......你必须打在属性中输入,并滚动到最后一个,所以你将自动完成:查看基于控制器的状态栏外观和布尔值,没有.我尝试了多次,但它只是复制不起作用.祝你今天愉快.


小智 33

我找到的应用程序解决方案围绕:"查看基于控制器的状态栏外观"设置为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
Run Code Online (Sandbox Code Playgroud)

很少使用childViewControllerForStatusBarHidden方法,但是图像选择器确实使用它,这就是为什么可能会引起一些麻烦

您还可以使用基于其属性返回YES或NO的方法来实现UIViewController单例.然后你的View controleller实现了childViewControllerForStatusBarHidden返回上面的单例.更改单身人士属性会自动更改应用中的状态栏.还有双方childViewControllerForStatusBarStyle


但是对于2014年的iOS8,请参阅此/sf/answers/1327221591/


Con*_*eer 19

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

'查看基于控制器的状态栏外观'并设置为NO.

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

- (void)viewDidLoad
{

    [super viewDidLoad];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];

}
Run Code Online (Sandbox Code Playgroud)

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

-(void)viewWillDisappear:(BOOL)animated{

     [[UIApplication sharedApplication] setStatusBarHidden:NO];

}
Run Code Online (Sandbox Code Playgroud)

setStatusBarHidden:withAnimation: 如果你想要一些流畅的动画

  • 我在pList和[application setStatusBarHidden:NO]中将'基于视图控制器的状态栏外观'设置为NO; [application setStatusBarStyle:UIStatusBarStyleDefault]; 在appDelegate中.这对我有用.谢谢. (4认同)
  • 我想通过我的应用程序显示它.我只是想在UIImagepickerController中隐藏它. (2认同)

use*_*041 18

子类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
Run Code Online (Sandbox Code Playgroud)

childViewControllerForStatusBarHidden是关键!

  • - (BOOL)prefersStatusBarHidden {return self.sourceType == UIImagePickerControllerSourceTypeCamera?是的:不 } (2认同)

met*_*urg 7

如果要从plist禁用状态栏,请尝试以下操作:

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

这对iOS 7来说是必要的,适合我.我不知道在iOS7中是否还有其他一些技术可以做到这一点.在info.plist中设置这两个标签.

每次viewcontroller出现时,在viewDidLoad中或图像选择器控制器完成时,使用:

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


小智 6

我上面使用了Silvertaurus的答案,但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
Run Code Online (Sandbox Code Playgroud)

这样可以在未显示摄像机时保持图像选择器的状态栏.


归档时间:

查看次数:

22968 次

最近记录:

9 年,5 月 前