iOSステータスバーを非表示にする方法


219

私のiOSビデオアプリでは、一部のビューコントローラーでステータスバーが非表示になっています。私は次のコードを使用してこれを行いました。

[[UIApplication sharedApplication] setStatusBarHidden:YES];
  • iOS 5およびiOS 6では機能しますが、iOS 7では機能しません。

  • 私はこれを特にビューコントローラーで試しました、

例えば:

-(BOOL)prefersStatusBarHidden { return YES; }

正常に動作しますが、親のビューコントローラーにステータスバーを再度表示できません。



1
ステータスバースタイルがストーリーボードで設定されている場合、「ビューコントローラーベースのステータスバー」(下記)を変更した後、ビューコントローラー設定が使用されなくなるため、plistでスタイルを設定する必要がある場合があります。stackoverflow.com/questions/18924345/...
マット

1
私は別の質問に答えました。これを試して。[ステータスバーをプログラムで非表示にする最も簡単な方法] [1] [1]:stackoverflow.com/a/27339754/3718498
wataru

1
私はそれのためのトリックを使用しました–私はそれをポッドcocoapods.org/pods/UIViewController+ODStatusBarとして公開し ました、それが誰にとっても役に立つことを願っています
Alex Nazarsky

ここでの回答は廃止されました。私はトラブルステータスバーに隠れたときにiOSの9のために正しい答えを見つけていたJUST THEの起動画面FORを行う方法を見つけるので、それは他人のためにうまくいけば簡単ですので、下のリンクをその:stackoverflow.com/questions/34413848/...
ベン・

回答:


277

この値をplistに追加する必要があります:「コントローラーベースのステータスバーの外観を表示する」、「NO」に設定します。

enter image description here


40
参考までに、生の鍵はUIViewControllerBasedStatusBarAppearance
William Denniss 2013年

1
@ Rajneesh071必要な作業にpreferredStatusBarStyleを設定したい場合はどうすればよい"View controller-based status bar appearance" set it to "YES".ですか?
Bimawa 2014年


どのような問題に直面していますか?
Rajneesh071 14

廃止予定のようで、アプリが壊れます
Ben


113

viewdidloadに次の行を追加します

  [[UIApplication sharedApplication] setStatusBarHidden:YES
                                        withAnimation:UIStatusBarAnimationFade];

新しいメソッドを追加します

  - (BOOL)prefersStatusBarHidden {
          return YES;
  }

info.plistファイルも変更します。コントローラベースのステータスバーの外観を表示します。 "=いいえ

私のための作品


これは私にとってはうまくいきましたが、plistの行の下にも追加する必要があります。「コントローラーベースのステータスバーの外観を表示する」= NO i、e viewdidloadに次の行を追加します[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 新しいメソッドを追加-(BOOL)prefersStatusBarHidden {return YES; } plistファイルの「ビュー・コントローラ・ベースのステータスバーの外観」= NOを追加

prefersStatusBarHidden私にとってのトリックは何ですか(この解決策が他の同様の解決策であったかどうかにかかわらず)
Abdo

34

Plistで次のプロパティを追加します。

Status bar is initially hidden = YES

View controller-based status bar appearance = NO

これでステータスバーが非表示になります。


8
生のキーはUIStatusBarHiddenとUIViewControllerBasedStatusBarAppearanceだろう
leolobato

27

この簡単な方法を試してください:


Objective-C:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated]
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

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

迅速:

override func viewWillAppear(animated: Bool) 
{
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}

override func viewWillDisappear(animated: Bool) 
{
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}

1
これは素晴らしい答えでした!また、さまざまなで試してみてくださいUIStatusBarAnimation
VedTopkar 2014

忘れてはいけない[super viewWillAppear:animated][super viewWillDisappear:animated]
SAMB

1
このシンプルなソリューションはiOS 10で機能しました。
coolcool1994 2017年

14

私は次のことをしました、そしてそれは(iOS 8でさえ)うまくいくようです:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }
}

- (BOOL)prefersStatusBarHidden {
    return YES;
}

12
  • UIApplication.setStatusBarXはiOS9で非推奨になりました
  • info.plistにUIViewControllerBasedStatusBarAppearance = NOを含めることは非推奨です
  • したがって、すべてのビューコントローラでpreferredStatusBarXを使用する必要があります

しかし、UINavigationControllerが関与していると、より興味深いものになります。

  • 子がステータスバーの下にコンテンツを表示しているため、navigationBarHidden = trueの場合、子UIViewControllerのpreferredStatusBarXが呼び出されます。
  • navigationBarHidden = falseの場合は、UINavigationControllerのpreferredStatusBarXが呼び出され、すべてのステータスバーの下にコンテンツが表示されます。
  • UINavigationControllerのデフォルトのpreferredStatusBarStyleは、UINav.navigationBar.barStyleからの値を使用します。.Default =ステータスバーのコンテンツ、.Black =ステータスバーのコンテンツ。
  • そのため、barTintColorをカスタムカラー(多分そう)に設定している場合は、barStyleを.Blackに設定して、白いステータスバーのコンテンツを取得する必要があります。barStyleがbarTintColorをオーバーライドする場合に備えて、barTintColorを設定する前にbarStyleを黒に設定します。
  • 代わりの方法は、バーのスタイルをいじるのではなく、UINavigationControllerをサブクラス化することです。
  • ただし、UINavigationControllerをサブクラス化する場合、navigationBarHidden = trueの場合、ステータスバーを制御できません。どういうわけか、UIKitは、この状況でUINavigationControllerを要求せずに子UIViewControllerに直接移動します。私は、子に肩をすくめるように依頼するのはUINavigationControllerの責任であるべきだと思いました。
  • そして、モーダルに表示されたUIViewControllerは、modalPresentationStyle = .FullScreenの場合にのみステータスバーで発言権を取得します。
  • カスタムプレゼンテーションスタイルのモーダルビューコントローラーがあり、それでステータスバーを制御したい場合は、modalPresentationCapturesStatusBarAppearance = trueを設定できます。

なぜアップルは一つのアドバイスに従うことができないのですか?壊れていない場合は修正しないでください。
Jargen89

9

iOS7でステータスバーを非表示にするには、2行のコードが必要です

  1. アプリケーション:(UIApplication *)アプリケーションdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions書き込み

     [[UIApplication sharedApplication] setStatusBarHidden:YES];
    
  2. info.plistにこれを追加してください

     View-Controller Based Status Bar Appearance = NO
    

8

理解を深めるために、コメント付きの写真をいくつか追加します。

変更前のアプリ

ここに画像の説明を入力してください

Project Navigatorという名前のフォルダーで見つかり、Supporting Files*。plistファイルをクリックします

ここに画像の説明を入力してください

あなたが示したあなたのアプリの異なる設定を取得した後。2つのキーUIStatusBarHiddenとを追加する必要がありますUIViewControllerBasedStatusBarAppearance。+ボタンをクリックするだけでこれを行うことができます

ここに画像の説明を入力してください

+を押した後、キーの1つを選択できます。入力を開始するだけです。

正しいバージョン:

ここに画像の説明を入力してください

そして最後に、この変更を適用した後のアプリケーション:

ここに画像の説明を入力してください

また、ここで代替ソリューションを見つけることができます


8

iOS10 prefersStatusBarHiddenでは、RootViewController(Swift)の変数をオーバーライドするだけで済みます。

override var prefersStatusBarHidden: Bool {
    return true
}

7

それを試してください。

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];

すごい。私は、ユーザーがログインしたら、それを再表示することがで必要とされていなかったビューコントローラのステータスバーを非表示にするにはこれを使用することができました。
LondonGuy

5

iOS7でステータスバーを非表示にするには:

plistファイルを開き、「コントローラーベースのステータスバーの外観を表示する」という行を追加し、その値をに設定しますNO


5

Swiftのバージョン(iOS9以前)は次のとおりです。

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}

これも機能します(iOS7以降):

override func prefersStatusBarHidden() -> Bool {
    return true
}

また、以下を呼び出す必要があります。

setNeedsStatusBarAppearanceUpdate()

とにかくviewDidLoad()

SplitViewコントローラーまたは他のcontainerビューコントローラーを使用する場合は、送信時にクラスを返すようにする必要があることに注意してくださいchildViewControllerForStatusBarHidden。これを行う1つの方法は、sayに公開の弱いvarを用意しstatusController、それをこのオーバーライドされたメソッドで返すことです。


1
上のブロックはiOS8で非推奨です。2番目の方法を使用してください。ありがとう!コードを編集して別の必須呼び出しを追加しました。
David H

5

iOS 9以降:

通りstatusBarHiddenの方法がされた推奨されていませんからiOS9 あなたは以下のようにplistの中に2つの値を追加する必要があります。

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

またはユーザーインターフェースによる以下の画像を参考にしてください。

ここに画像の説明を入力してください

同様にstatusBarHiddenされて推奨されていませんからiOS9

@property(readwrite、nonatomic、getter = isStatusBarHidden)BOOL statusBarHidden NS_ DEPRECATED _IOS(2_0、9_0、 "Use-[UIViewController prefersStatusBarHidden]")__TVOS_PROHIBITED;


5

SWIFT 3+の修正済みソリューション(iOS 9、10)

1- info.plistでプロパティの下に設定

ここに画像の説明を入力してください

2-以下のコードをルートコントローラーに貼り付けます

 private var isStatusBarHidden = true {
        didSet {
            setNeedsStatusBarAppearanceUpdate()
        }
    }

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

あなたは呼び出すことができますisStatusBarHidden = trueし、isStatusBarHidden = falseあなたがしたい場所をhide/showステータスバー



4

iOSでステータスバーを非表示にする手順
1. AppDelegate.mファイルを開き、didFinishLaunchingWithOptionsメソッドにapplication.statusBarHiddenを追加します。

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    application.statusBarHidden = YES;
    return YES;
    }
  1. info.plist を開いて設定

View controller-based status bar appearance セットする NO


4

スウィフト5

iOSステータスバーを非表示にするには、次の手順に従います。

  1. Info.plistで開きます。
  2. 新しいキービューコントローラーベースのステータスバーの外観と値セットをNOに追加します。
  3. 新しいキーの追加ステータスバーは最初は非表示で、値はYESに設定されています。
  4. プロジェクトを再コンパイルします。
  5. ステータスバーがiOS電話で非表示になりました。

最終設定のスクリーンショット:

最終設定

これはXcode 10.2で動作しています


2

からUIKit> UIApplication.h

// Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
@property(nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden;
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_AVAILABLE_IOS(3_2);

したがってView controller-based status bar appearance、NOに設定する必要があります


2

スシタの質問に答えるには: ます。これにより、prefersStatusBarHiddenが呼び出され、目的のステータスバーの状態で更新されます。これを試して:

    @property (nonatomic, getter=isHideStatusBar) BOOL hideStatusBar; // Give this a default value early

    - (BOOL)prefersStatusBarHidden {
        return self.isHideStatusBar;
    }

    - (void)someMethod {
    // triggered by an event or user action
    [self setHideStatusBar:YES];
    [self setNeedsStatusBarAppearanceUpdate];
    }

ステータスバーをもう一度表示したい場合は、プロパティhideStatusBar(またはそれを呼び出すもの)をNOに設定します。別の呼び出しを行うことにより、preferStatusBarHiddenを間接的に呼び出します

[self setNeedsStatusBarAppearanceUpdate]

1

Swift 3の更新:

Info.plistを次の情報で更新します。

View controller-based status bar appearance: NO

次に、ViewControllerまたは他の場所で:

UIApplication.shared.isStatusBarHidden = true

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.