web-dev-qa-db-ja.com

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のステータスバーを非表示にする方法

31

IOS7でステータスバーが非表示にならないという問題がありました。プログラムで非表示にし、iOS7で表示しましたが、iOS6で実行すると、ステータスバーが適切に非表示になりました。 plistに移動して、次を追加する必要があります。

「コントローラーベースのステータスバーの外観を表示」および「いいえ」に設定します。

ステータスバーを他のView Controllerに再表示し、特定のVCでのみ非表示にする場合は、VCがロードされたときにステータスバーを非表示に設定します。 VCが消えたら、ステータスバーを非表示に設定します。

- (void)viewDidLoad
{

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

}

コントローラーが消えたら、以下を追加してステータスバーを設定します。これにより、非表示にならず、次のビューに表示されます。

-(void)viewWillDisappear:(BOOL)animated{

     [[UIApplication sharedApplication] setStatusBarHidden:NO];

}

setStatusBarHidden:withAnimation:スムーズなアニメーションが必要な場合

19
ConfusedDeer

これは私のためにうまくいきました:

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

編集:今日の時点で、info.plistで、View Controllerベースのステータスバーの外観をコピーして貼り付けるだけでは機能しないことがわかりました...プロパティでEnterを押してスクロールする必要があります最後の1つであるため、コントローラーベースのステータスバーの外観とブール値を表示するオートコンプリートがあります。複数回試しましたが、コピーだけでは機能しません。ごきげんよう。

47

私がアプリケーション用に見つけたソリューションは、「コントローラーベースのステータスバーの外観を表示」を「はい」に設定して構築しました

カテゴリを追加しました:

//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はめったに使用されませんが、画像ピッカーはそれを使用するため、何らかのトラブルを引き起こす可能性があります

プロパティに基づいてYESまたはNOを返すメソッドを使用して、UIViewControllerシングルトンを実装することもできます。次に、View controlellerがchildViewControllerForStatusBarHiddenを実装して、上記のシングルトンを返します。シングルトンプロパティを変更すると、アプリのステータスバーが自動的に変更されます。ツインメソッドもありますchildViewControllerForStatusBarStyle


ただし、2014年のiOS8については、こちらをご覧ください https://stackoverflow.com/a/18960308/294884

33
Silvertaurus

サブクラス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がキーです!

18
user2797041

Plistからステータスバーを無効にする場合は、これを試してください。

  1. ステータスバーは最初は非表示:はい
  2. コントローラーベースのステータスバーの外観を表示する:いいえ

これはiOS 7に必要で、私にとってはうまくいきます。 iOS7でこれを行うための他の手法があるかどうかはわかりません。 info.plistでこれらの2つのタグを設定します。

ViewControllerが表示されるたびに、viewDidLoadに表示されるか、画像ピッカーコントローラーが終了するたびに、これを使用します。

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

上記の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

これにより、カメラが表示されていないときに、画像ピッカーのステータスバーが表示されます。

6
jbg7474

これを試して

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

これも確認してください discussion

1
Adarsh V C

これを試してください。

UIImagePickerControllerのデリゲートを設定する

•デリゲートのnavigationController:didShowViewController:animated:関数でステータスバーを非表示にします。

例えば:

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

カテゴリでそれを行うことができます:

@interface UIImagePickerController (HideStatusBar)

@end


@implementation UIImagePickerController (HideStatusBar)

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

- (UIViewController *)childViewControllerForStatusBarHidden
{
    return nil;
}

@end

ソース: https://Gist.github.com/psobko/949347

1
kanobius

試してみてください ここに投稿された私の答えViewController-Based Status Bar Appearance

0
voxlet

私の場合、UIViewPickerViewController(iOS7)を表示するにはpresentViewControllerを使用する必要がありました。

1- .plistでView Controllerベースのステータスバーの外観をNOに設定します2- UIImagePickerControllerおよびviewDidLayoutSubviewsのカテゴリを作成します:

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

3-次の2つのメソッドをカテゴリに追加しました。

- (BOOL)prefersStatusBarHidden{
    return YES;
}

- (UIViewController *)childViewControllerForStatusBarHidden{
    return nil;
}

これが役立つことを願っています。

0
Ayoub Khayati
-(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];
}

それはあなたが望むものを達成するのに役立つかもしれません。

0
D-eptdeveloper

常にステータスバーを非表示にして、イメージピッカーを開くと表示されます。再度非表示にするには、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

0
Lewis42

サブクラス化とplistを使用せずに、これを非常に簡単な方法で解決したと思います。 UIImagePickerControllerのみを非表示にします。

この例は、フォトギャラリーのみを表示するためのものですが、uiimagepickercontrollerを使用して、どこにでも同じ方法で適用できると思います

- (void)showGallary
{
  [CATransaction begin];
  [CATransaction setCompletionBlock:^{
      [[UIApplication sharedApplication] setStatusBarHidden:YES];
      [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
  }];

  imgPicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;

  [CATransaction commit];
}
0
greenhouse