ステータスバーが消えない


112

アプリケーションを作成していて、ステータスバーを非表示にしたい。アプリをテストすると、スプラッシュスクリーンが表示されている間はステータスバーが非表示になりますが、アプリが完全に読み込まれると、ステータスバーが再び表示されます。

Xcode 5とiOS 7を使用していて、プログラムでステータスバーを無効にしてみました

  ([[UIApplication sharedApplication] setStatusBarHidden:YES    
      withAnimation:UIStatusBarAnimationFade];),

info.plistファイルで、.xibファイルで属性インスペクタを使用します。何も動作していないようです。

何か案は?

回答:


220

アプリのルートビューコントローラーに次のメソッドを追加してみてください。

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

2
これをグローバルに行う方法は?
jjxtra 2013

16
また、Appleのドキュメントに記載されているように、[self setNeedsStatusBarAppearanceUpdate];このメソッドを呼び出した後、デフォルト値(デフォルト値はNO)以外のものでを呼び出す必要があります。
マンダーソン2013

3
@PsychoDadよりグローバルなソリューションについては、私の答えを確認してください。
Idan 2013

2
パーフェクト、ありがとう。iOS 7がこれを行っている理由が理解できず、ステータスバー設定が含まれていないXIBが考慮されません!
justinhartman 2013

1
スタックに追加されたViewControllerにこれを追加するだけで、そのビューコントローラーでステータスバーを非表示にすることができます。このビューコントローラーが削除されると、ステータスバーが返されます。
MacD 2013年

126

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

これにより、ステータスバーを非表示モードに設定できます。これにより、他の回答とは異なり、グローバルに設定されます。

更新:スプラッシュスクリーンでステータスバーを非表示にする場合は、ターゲットステータスバーオプションで[ アプリケーションの起動時に非表示]をマークすることを忘れないでください。また、アプリ内のコードで実行したくない場合は、plistで「ステータスバーは最初は非表示」を「YES」に追加できます。


2
これを理解するのに多くの時間を要しました。それは誰もが抱えている問題だと私は思うが、Appleはそれについて十分に言及しなかった。喜んでお手伝いします...
Idan

7
正常に動作します。「ステータスバーは最初は非表示」の.plist値をYESに設定することを忘れないでください。
andreas-supersmart 2013

1
うわー、それはKobold2d 2.1.0とiOS 7で動作する唯一のものでした。
Binarian 2013

5
Appleは実際には下位互換性の擁護者ではありません。みんなでフルートに合わせて踊り、アプリを1つずつ更新しましょう。申し訳ありません。フラストレーションを解消します。アップルが原因。
Henrik Erlandsson 2013

1
最後にそれは私のために働きます。-(BOOL)prefersstatusbarhiddenメソッドがモデルビューで機能しないためです。
utkal patel 2013年

73

投稿したコードはiOS 6.1以下で動作します。iOS 7の場合、Appleは各ビューのステータスバーを直接制御するための新しいメソッドを利用できるようにしました。Info.plistでこのオプションをオフにするすると、少なくとも現在の開発者プレビュー(4)のステータスバーを非表示にできます。

これを追加してNOに設定

参考までに、Appleの開発者ポータルで入手できるiOS 7移行ガイドをご覧ください。


3
私の意見では、この回答の方が優れています。私のアプリでは、横長モードでのみステータスバーを非表示にしたいので、ありがとうございます。
Son Nguyen

アプリ全体でそれを非表示にしたいので、これは私に役立ちます
kevinl '20

2
>これは、ここで説明されて-私の意見では、この答えは、最良の答えでなければなりませんdeveloper.apple.com/library/prerelease/ios/documentation/...
marceloquinta

5
私はこれを実行しましたが、ステータスバーが非表示になっているようですが、ステータスバーが占めるスペースの量によってアプリが「プッシュダウン」され、バッテリーインジケーターが表示されます。
vedran 2013

36

私はすべてのアプリと「app」-info.plistでステータスバーを非表示にして、辞書「情報プロパティリスト」に2つの行を追加します。「ビューコントローラベースのステータスバーの外観」をNOに設定し、「ステータスバーは最初は非表示になっています。「YESに設定すると、私にとってn_nが機能します」

plist情報


2
これにより、開発者が新しい方法でアプリを修正する時間がないときに、iOS 7で古いアプリを意図したとおりに実行するように設計された互換モードにアプリが強制されます。代わりに、ビューコントローラーにprefer *メソッドを実装する必要があります。
lhunath 2014年

17

ただし、UIImagePickerを使用すると、ステータスバーが再び表示されます。

その場合、以下のようにステータスバーを非表示にする必要があります。

- (void)imagePickerController:(UIImagePickerController *)aPicker didFinishPickingMediaWithInfo:(NSDictionary *)info {

// for iOS7
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }

2
同じ問題が発生しています。ステータスバーは、UIImagePickerを使用するまで非表示です。私はあなたの解決策を試しました、そしてそれは私のために働いていません。投稿にコード以外の何かを追加する必要がありましたか?
Dev01

@WootWoot私も追加しました-(BOOL)prefersStatusBarHidden {return YES; コントローラーを表示します。ぜひお試しください。
孤独2013

うまくいかないようです。実際に電話をかけsetNeedsStatusBarAppearanceUpdateますか?
RyanM 2013

ボタンクリックでステータスバーを非表示にする必要があります。以下のコードを試しましたが、うまくいきませんでした。誰か助けてください。[[UIApplication sharedApplication] setStatusBarHidden:YES];
janitheshan 2013

8

長い検索の末、ついに私も非常にシンプルな解決策を見つけました。 UIImagePickerController問題。

他の回答で述べたように、AppDelegate didFinishLaunchingでステータスバーを非表示に設定し、[コントローラーベースのステータスバーの外観を表示]を[いいえ]に設定します。

次に、AppDelegateで:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
      [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

et voila-UIImagePickerControllerが最前面であっても、ステータスバーは非表示のままです。

これは、UIImagePickerControllerを表示するたびに「再非表示にする」よりも優れています。これは、アプリ全体で非表示のままになるためです。


2
iPadのiOS7ではまだ何かが壊れているように見えますが、UIImagePickerControllerは2度目に表示されたときにステータスバーをスローします... 。そのため、短時間で汚れているように見えても、すぐに再び修正される
ikuramedia '26

1
これは、iOS8で私のために機能した唯一のメソッドです...どういうわけか、prefersStatusBarHiddenがビューコントローラーで呼び出されません。
mojuba

7

特定のUIViewControllerのステータスバーを非表示にするには、次のコードを追加するだけです。

-(BOOL)prefersStatusBarHidden
{
    return YES;
}

お役に立てれば !


!! これは私にとってiOS 9.2で機能したソリューションです。plistを変更しても効果はありませんでした。
mico 2016

5

プロジェクトの概要から非表示にすることができます。起動中に非表示のチェックボックスがあります。

スナップショットを見る

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


4

私はこの解決策を見つけました。それは魅力のように働きます。UIImagePickerControllerを使用したいビューコントローラーでこのコードを記述します。

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

3

上記の単独の回答に加えて、必ずimagePickerControllerDidCancelメソッドを実装し、そこにも同じコードを追加してください。


2

UIImagePickerにも問題がありました。アローンの回答と同様に、私の解決策は次のとおりでした。私はこの行またはコードを追加しました:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

この関数に:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

私はこれをiOS 6以前でテストしていませんが、iOS 7でうまく動作します。


2

Swiftソリューション

これをView Controllerに追加するだけです:

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

0

Xcode 6を使用していますが、このソリューションはiOS 7および8で動作します。

最初に、plistファイルで「コントローラーベースのステータスバーの外観を表示する」を「いいえ」に設定します。

次に、AppDelegateでこれを追加します。

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
      [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

0

私の問題は、View Controller Containmentを使用したことでした。ステータスバーを表示または非表示にできるのは、たとえばナビゲーションコントローラーに組み込まれている最上位のビューコントローラーのみです。

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