31

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?

4

13 に答える 13

47

これは私にとってはうまくいきました:

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

編集:今日の時点で、info.plistで、ビューコントローラーベースのステータスバーの外観をコピーして貼り付けるだけでは機能しないことがわかりました...プロパティでEnterキーを押してスクロールする必要がありますそれらの最後のものなので、コントローラーベースのステータスバーの外観とブール値を表示するオートコンプリートがあり、no. 何度も試しましたが、コピーしただけではうまくいきません。良い1日を。

于 2013-09-20T08:47:12.027 に答える
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

メソッドchildViewControllerForStatusBarHiddenはめったに使用されませんが、画像ピッカーはそれを使用するため、問題が発生する可能性があります

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


ただし、2014 年の iOS8 については、このhttps://stackoverflow.com/a/18960308/294884を参照してください。

于 2013-11-14T12:42:41.777 に答える
19

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:滑らかなアニメーションが必要な場合

于 2013-09-12T19:50:22.647 に答える
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

childViewControllerForStatusBarHidden が鍵です!

于 2013-09-19T20:32:44.967 に答える
1

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

@interface UIImagePickerController (HideStatusBar)

@end


@implementation UIImagePickerController (HideStatusBar)

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

- (UIViewController *)childViewControllerForStatusBarHidden
{
    return nil;
}

@end

ソース: https://gist.github.com/psobko/9493473

于 2016-04-14T15:44:48.460 に答える
1

これを試してください。

• 代理人の設定UIImagePickerController

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

例えば:

-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
于 2013-09-12T11:56:53.050 に答える
0

を使い続けたい場合は、ここに投稿された私の回答を試してくださいViewController-Based Status Bar Appearance

于 2013-10-05T16:34:35.567 に答える
0

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

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;
}

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

于 2014-05-19T08:19:43.823 に答える
0

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

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

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

  imgPicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;

  [CATransaction commit];
}
于 2014-09-11T06:39:02.257 に答える