iOS7でステータスバーを非表示にできない


267

iPhone 5 iOS 7を4ベータ版にアップグレードしました。このiPhoneでXcode 5からアプリを実行すると、ステータスバーが非表示になりませんが、非表示になりません。

機能していない:

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

機能していない:

[UIApplication sharedApplication].statusBarHidden = YES;

Apple開発者フォーラムにログインできません


15
確かに、私の答えはXcodeに関係しており、それは一般に公開されています。「あなたがこれに答えるなら、それはNDAの違反だ」と言うのはあまりにも一般的です..開発者に自分で判断してもらいましょう;-)
Jake


プログラムで特定のViewControllerのステータスバーを非表示にする方法
2014

回答:


558

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

アプリでUIImagePickerControllerを使用している場合、これは単に機能しないことに注意してください。

http://www.openfl.org/developer/forums/general-discussion/iphone-5ios-7-cant-hide-status-bar/から、mgirouxのソリューション

XcodeのInfo設定にView Base Controllerを追加する例


3
すごい!これで何時間も無駄に!ありがとうございました!
Idan 2013

12
参考までに、実際のInfo.plistファイルに保存されている生の値をと呼びUIViewControllerBasedStatusBarAppearanceます。
Adam Rosenfield 2013年

55
このアプローチの唯一の問題は、UIImagePickerControllerを使用して画像を選択すると、ステータスバーがもう一度表示されるようにすることです。これを防ぐ唯一の確実な方法は、各ビューコントローラーにprefersStatusBarHiddenメソッドを実装し、UIViewControllerBasedStatusBarAppearanceをリセットすることです。 plist設定をtrueにします。
Jason Fuerstenberg 2013年

5
なぜAppleがこれを変更したのか本当にわかりません!ありがとう:)
Mohamed Amine 2013年

18
またStatus bar is initially hiddenYESに設定する必要があります。
Zorayr、2014年

277

ビューコントローラーにメソッドを追加します。

- (BOOL)prefersStatusBarHidden {
    return YES;
}

35
見るす​​べての人にとって、これは特定のビューでステータスバーを動的に削除する場合に行う方法です。この方法は、plistで「ビューコントローラーベースのステータスバーの外観」を何に設定したかに関係なく機能します。
T氏

2
+1 b / cステータスバーを動的に表示/非表示にする機能を探しています。ただし、Pリストの設定方法(上記の@Satgiによる投稿を参照)は、ステータスバーをグローバルに表示/非表示にする最良の方法です。
JonnyB 2013年

フォトギャラリーがどこかにある場合、通常はそこだけでコントロールを非表示にし、オン/オフを切り替えることもできます。これは私にとっては機能しません、関数は呼び出されません。同じ場所にpreferredStatusBarStyleがあり、呼び出されます
Cristi Băluță

4
@ Mr.T iOS 8では、もはやそうではないようです。ビューコントローラーベースのステータスバーの外観をNOに設定prefersStatusBarHiddenし、ビューコントローラーからtrueを返すと、機能しません。ステータスバーはまだ表示されます。
Isuru

1
どうしてNOに設定したのですか?YESに設定すると、他のケースではすべてのView Controllerに要求しますが、もちろん要求しません。
2014年

84

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

-> Status bar is initially hidden=はい

-> View controller-based status bar appearance=いいえ

両方を追加-ステータスバーが非表示になります。


うん、これも私のために働いた。「ステータスバーは最初は非表示」オプションをYESに設定しないと、期待どおりに機能しません。どうも。
AndrewShmig 2014年

53

単一のビューでステータスバーを非表示にするには、以下を使用する必要があります。

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

最初はこれでうまくいきませんでした。次に、このメソッドのドキュメントで、次のように述べています。//アプリケーションがデフォルトのUIViewControllerベースのステータスバーシステムを使用している場合、statusBarHiddenを設定しても何も起こりません。

これはplistファイルで行い、キーView controller-based status bar appearanceセットをに追加する必要がありますNO。そしてそれはうまくいった。


16

レガシーUIApplicationメソッドを使用してステータスバーを非表示/表示するには、アプリでiOS 7のplist値を設定する必要があります。

View-Controller Based Status Bar Appearance = NO

この値はデフォルトでYESに設定されています。NOに変更すると、従来の方法を使用できます。YESに設定したままにしても、ステータスバーを非表示にすることができますが、オーバーライドするのはアプリの各ビューコントローラーサブクラス次第です:prefersStatusBarHiddenYESを返します。

アプリでステータスバーの外観または可視性を変更する必要があり、View-Controller Based Status Bar AppearanceがYESに設定されている場合は常に、最も外側のビューコントローラーが以下を呼び出す必要があります。

setNeedsStatusBarAppearanceUpdateAnimation


一般のplistでは動作しませんでしたので、私は、カスタムiOSのターゲットのプロパティに適用しなければならなかった
xarly

16

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

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

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

    View-Controller Based Status Bar Appearance = NO

2
これを整理するために、didFinishLaunchingの中に入れている場合は、次のように書く[application setStatusBarHidden:YES];か、またはapplication.statusBarHidden = YES;
joel.d

上記の答えにタイプミスがあるかもしれません。「ビューコントローラーベースのステータスバーの外観= NO」は機能しませんでしたが、「ビューコントローラーベースのステータスバーの外観= NO」は機能しました。
tmr 2015

11

この問題には非常に多くの組み合わせが提案されていますが、問題は、iOS 6と7が異なる方法を使用してステータスバーを非表示にすることです。iOS 7でiOS6スタイルの動作を有効にするためのplist設定の設定に成功したことはありませんが、iOS 6+をサポートするようにアプリを構築している場合は、特定のビューコントローラーがステータスを非表示にするように3つのメソッドを一度に使用する必要がありますバー:

// for ios 7 
- (BOOL)prefersStatusBarHidden{
    return YES;
}

// for ios 6
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    // explicitly set the bar to show or it will remain hidden for other view controllers
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
}

これは、plistの設定に関係なく機能するはずです。


7

ステータスバーを非表示にするには、以下の両方の変更を行う必要がありました。

ステータスバーを非表示にするビューコントローラに次のコードを追加します。

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

これを.plistファイルに追加します(アプリケーション設定の「info」に移動します)

View controller-based status bar appearance --- NO

次に、この行を呼び出してステータスバーを非表示にすることができます。

[[UIApplication sharedApplication] setStatusBarHidden:YES];

6

これらの2行をinfo.plistファイルに追加するだけです。iOS7とそれ以前のバージョンの両方で修正されます。

  • ステータスバーは最初は非表示です=はい
  • コントローラベースのステータスバーの外観を表示=いいえ

プロジェクトに移動し、[ターゲット]-> [全般]を選択して、[ステータスバーのスタイル...アプリケーションの起動時に非表示にする]チェックボックスがオンになっていることを確認します。これは動作します。


6

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

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

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

4

私のために働いた唯一のものはあなたのplistに以下を追加することです

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

4

アプリ全体でステータスバーを非表示にするために私が見つけた最も簡単な方法は、を作成categoryUIViewControllerてオーバーライドすることprefersStatusBarHiddenです。この方法では、すべての単一のビューコントローラーでこのメソッドを記述する必要はありません。

UIViewController + HideStatusBar.h

#import <UIKit/UIKit.h>

@interface UIViewController (HideStatusBar)

@end

UIViewController + HideStatusBar.m

#import "UIViewController+HideStatusBar.h"

@implementation UIViewController (HideStatusBar)

//Pragma Marks suppress compiler warning in LLVM. 
//Technically, you shouldn't override methods by using a category, 
//but I feel that in this case it won't hurt so long as you truly 
//want every view controller to hide the status bar. 
//Other opinions on this are definitely welcome

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

#pragma clang diagnostic pop


@end

最高のリアルなiOS7、非フェイキーソリューション、素晴らしい
Fattie

3
  1. plistに追加----

    コントローラベースのステータスバーの外観を表示---いいえ

  2. 各viewControllerに書き込みます

    - (void) viewDidLayoutSubviews
    {
        CGRect viewBounds = self.view.bounds;
        CGFloat topBarOffset = 20.0;
        viewBounds.origin.y = -topBarOffset;
        self.view.bounds = viewBounds;
    
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];//for status bar style
    }

iOS 7のステータスバーの問題の場合、アプリのターゲットは5.1以上である必要があります


3

このスレッドの回答の多くは機能しますが、最終的に呼び出す必要がある動的なことを実行しようとしている場合は、私の理解です。

[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];

3

iOS 7でステータスバーを非表示にする手順:

1.アプリケーションのinfo.plistファイルに移動します。

2.そしてセット、ビューコントローラーベースのステータスバーの外観:ブールNO

ステータスバーの問題が解決したと思います。


3

単一ビューのiOS 7の場合、viewWillappearメソッドで使用します。

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

ステータスバーを表示するには、以下を使用します。

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];


2

Info Plistファイルで、次のプロパティの行を追加します

プロパティ名:コントローラーベースのステータスバーの外観を表示

値:いいえ


1

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

- (BOOL)prefersStatusBarHidden
    {
        return YES;
    }

1

私のプロジェクトでここに投稿されたこれらのオプションをすべて試しましたが、それらは機能しません。私は自分XcodeのアプリをiOS 7に更新し、いくつかの設定がどこかでめちゃくちゃになったという事実に関係しているのではないかと思いました。私はそれのために完全に新しいプロジェクトを構築することに決めました、そして、単純な設定の後に: " Status bar is initially hidden = YES"と " View controller-based status bar appearance = NO"他の多くの人が述べたように、それは正しく機能しました(すなわちステータスバーがありません)。

古いバージョンからiOS 7に更新されたプロジェクトで作業していて、他のすべてのオプションを試した場合の私のアドバイスは、新しいプロジェクトをビルドすることです。


私はこれと同じ手法を使用して、すべての画面でステータスバーをグローバルに非表示にできることを最初に確認しましたが、アプリは「時間中心」なので、ほとんどの画面で時間を表示したいと考えました。さまざまな理由で除外したかった1つの画面のみです。私はあなたのパラメーターの反対を使用してしまいました:最初は非表示=いいえ&VCベースのステータスバーの外観=はい。 次に、(BOOL)prefersStatusBarHiddenメソッド(YESを返す)を、非表示にしたいVCに配置する必要がありました。うまく動作します。他の理由により、アプリがiOS7のみであることを付け加えておきます。
bobsmells 2014年

1

2019の場合...

ステータスバーのないアプリを作るには、

info.plistをクリックし、右クリックして[行を追加]をクリックします。

これら2つを、次の設定で追加します。

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

これですべてです。




0

特定のviewControllerのステータスバーを非表示にするには

- (BOOL)prefersStatusBarHidden {
    return YES;
}

アプリケーションの非表示ステータスバーを設定するには:

  • セットView controller-based status bar appearanceNOの.plist中とで application: didFinishLaunchingWithOptions:セット: [application setStatusBarHidden:YES];

    注:setStatusBarHidden:非推奨

または

  • プロジェクト設定->一般タブ->導入情報

    チェックHide Status barボックス。


-1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
application.statusBarHidden = YES;
return YES;
}

質問は、このアプローチが機能しないことを明確に述べています。答える前に質問をよく読んでください。
Borys Verebskyi 2016

ビューコントローラベースのステータスバーの外観がNOに設定されている限り、これは最もクリーンなアプローチです。
エヴァンイッシェ2016

-7

「Apple開発者フォーラムにログインできない」理由はわかりませんが、(NDAに違反せずに)Xcodeを使用してstatusBarを非表示にすることもできます。これは、アプリケーションターゲットの一般的な設定です。ここに画像の説明を入力してください


いいえ、魅力のように機能します。フォーラムはここしばらくの間活動しています。
Jake
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.