アプリケーションの背景が暗いのですが、iOS 7 ではステータス バーが透明になりました。そのため、隅にある緑色のバッテリーインジケーターだけが見えます。ホーム画面のようにステータス バーのテキストの色を白に変更するにはどうすればよいですか?
59 に答える
または、ビュー コントローラー ベースのステータス バーの外観を無効にすることもできます。
- に設定
View controller-based status bar appearance
しNO
ますInfo.plist
。 - 電話
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
注: このメソッドは iOS9 で廃止されました。preferredStatusBarStyle
代わりに UIViewController で使用してください。( Apple Developer Libraryを参照)
これは、コードを 1 行も書かずに実行できます。
アプリ全体でステータス バーのテキストの色を白にするには、次の手順を実行します。
あなたのプロジェクトのplistファイルについて:
- ステータス バーのスタイル:
Transparent black style (alpha of 0.5)
- コントローラー ベースのステータス バーの外観を表示します。
NO
- ステータスバーは最初は非表示です:
NO
注: 最も支持された回答は、iOS 7 / 8 では機能しません
Info.plist で、「コントローラー ベースのステータス バーの外観を表示する」を NO に設定します。
AppDelegate に追加
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
に
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
...
}
このソリューションは、iOS 7 / 8 で機能します。
私にとっては、他の回答(および他のソース/ドキュメントから)のすべてのものを使用しても何も起こりませんでした。役に立ったのは、XIB でナビゲーション バーのスタイルを「黒」に設定することでした。これにより、コードをまったく使用せずにテキストが白に変更されました。
どれもうまくいかなかったので、ここに実用的な解決策があります...
でInfo.plist
、次の行を追加します。
UIViewControllerBasedStatusBarAppearance
値を設定しますNO
。
次に、AppDelegate でdidFinishLaunchingWithOptions
、次の行を追加します。
[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];
次の 2 つの手順のみ:
ステップ1:
の [情報] タブで、project target
行を追加します。
UIViewControllerBasedStatusBarAppearance
、設定値NO
。
ステップ2:
プロジェクト内AppDelegate.m
:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
…
[application setStatusBarStyle:UIStatusBarStyleLightContent];
…
}
これは、2013 年 9 月 18 日にリリースされた Golden Master iOS 7 および Xcode 5 GM シードと iOS7 SDK で動作します (少なくともナビゲーション コントローラーが非表示の場合)。
に設定
the UIViewControllerBasedStatusBarAppearance
しNO
ますInfo.plist
。メソッド内またはどこでも、
ViewDidLoad
ステータスバーのスタイルを変更したい場所:[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
UIViewController が UINavigationController 内にある場合は、BarStyle を設定する必要があります。
-[UINavigationBar setBarStyle:UIBarStyleBlack]
元の回答はこちら
Interface Builderで作成された埋め込みナビゲーション コントローラーがある場合は、ナビゲーション コントローラーを管理するクラスで次のように設定してください。
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
それだけで十分です。
単純にアプリ内デリゲート:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Swift 5では、以下の手順に従います。
- キーを追加し、Info.plist に
UIViewControllerBasedStatusBarAppearance
値を設定しますfalse
- キー
UIStatusBarStyle
を追加して値を設定するUIStatusBarStyleLightContent
まあ、これは私にとって本当にケーキのように機能しています。
アプリの に移動しますinfo.plist
。
View controller-based status bar appearance
に設定NO
Status bar style
に設定UIStatusBarStyleLightContent
次に、アプリのデリゲートに移動し、ウィンドウの RootViewController を設定する次のコードを貼り付けます。
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,320, 20)];
view.backgroundColor=[UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:1.0];
[self.window.rootViewController.view addSubview:view];
}
ビンゴ。それは私のために働いています。
iOS 7 では、Apple 開発者ドキュメントで説明されているように、個々のビュー コントローラーでステータス バーの外観を決定できます。
iOS 7 では、アプリの実行中にステータス バーのスタイルを調整する機能がビュー コントローラーに提供されます。ステータス バーのスタイルを動的に変更する良い方法は、実装
preferredStatusBarStyle
して (アニメーション ブロック内で) ステータス バーの外観を更新し、 を呼び出すことsetNeedsStatusBarAppearanceUpdate
です。
ステータス バーの外観をグローバルに設定するには、2 段階のプロセスがあります。
まず、ステータス バーの外観をビューごとに設定したくないことを iOS に伝える必要があります。
次に、担当して実際に新しいグローバル ステータス バー スタイルを設定する必要があります。
ビューごとのステータス バー コントロールを無効にするには、 でView controller-based status bar appearance
プロパティを設定する必要がありますInfo.plist
。
Project Navigator を開き、iOS アプリのプロジェクトを選択してから、[Info] タブを選択します。
行にカーソルを合わせ、表示されるプラス記号をクリックして、新しいプロパティを に追加します.plist
。
[キー] フィールドに入力View controller-based status bar appearance
し、[タイプ] フィールドが に設定されていることを確認しBoolean
ます。最後に、NO
[値] フィールドに入力します。
ステータス バーのグローバル スタイルを設定するには、[情報] タブの下に別のプロパティを追加します。キーはStatus bar style
、タイプはString
、値はOpaque black style
です。
もう少し詳細とサンプルコードを含むブログ投稿を次に示します。
http://codebleep.com/setting-the-status-bar-text-color-in-ios-7/
これはiOS 7 UI Transition Guideに記載されており、直接アクセスするには Apple 開発者 ID が必要です。関連する抜粋:
ステータス バーは透明なので、その後ろのビューが透けて見えます。[...]
UIStatusBarStyle
定数を使用して、ステータスバーのコンテンツを暗くするか明るくするかを指定します。
UIStatusBarStyleDefault
ダークコンテンツを表示します。[...]
UIStatusBarStyleLightContent
ライトコンテンツを表示します。ダーク コンテンツがステータス バーの背後にある場合に使用します。
また、おそらく興味深い:
iOS 7 では、個々のビュー コントローラーからステータス バーのスタイルを制御し、アプリの実行中に変更できます。この動作をオプトインするには、
UIViewControllerBasedStatusBarAppearance
キーをアプリのInfo.plist
ファイルに追加し、値を指定しますYES
。
このドキュメントも、Apple 開発者 ID でアクセスできます。
単に呼び出す
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];
の中に
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
私の方法は、AppDelegate
iOS7で私にとって素晴らしい作品です。
Swift で同じ結果が必要な場合は、AppDelegate.swift ファイルで次のコードを使用できます。
UINavigationBar.appearance().barStyle = .BlackTranslucent
ステータスバーのテキストは白くなります :-) !
それでも info.plist を YES に設定して使用したい場合View controller-based status bar appearance
、つまり各ビューコントローラーのステータスバーを変更できる場合は、ViewDidLoad のステータスバーの白いテキストに次を使用します。
[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
要約すると、プロジェクトを編集してInfo.plist
以下を追加します。
View controller-based status bar appearance
:NO
Status bar style
:Opaque black style
または、生のキー/値の plist がある場合
UIViewControllerBasedStatusBarAppearance
:NO
UIStatusBarStyle
:Opaque black style
Plist で、これを追加します。
- ステータス バーのスタイル:
UIStatusBarStyleLightContent
- コントローラー ベースのステータス バーの外観を表示します。
NO
ご質問に対する完全な回答をさせてください。ステータス バーのテキストの色を変更するのは非常に簡単ですが、iOS 7 では特に初心者にとっては少し混乱します。
ビュー コントローラーを選択し、右側の [シミュレートされたメトリック] に移動して、ストーリーボードで色を黒から白に変更しようとしている場合、それは機能せず、理由がわかりません。このように変更することで機能するはずですが、どのようにでも。
次に、plist に UIViewControllerBasedStatusBarAppearance プロパティが見つかりませんが、デフォルトではそこにはありません。+ボタンをクリックして自分で追加し、NOに設定する必要があります。
iOS 7 ステータスバーの文字色
最後に、AppDelegate.m ファイルに移動し、didFinishLaunchingWithOptions メソッドに次の行を追加する必要があります。
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
これにより、すべてのビュー コントローラーの色が白に変わります。お役に立てれば!
これを機能させるための鍵は、フルスクリーン ビュー コントローラーのみがステータス バーのスタイルを決定することです。
ナビゲーション コントローラーを使用していて、ビュー コントローラーごとにステータス バーを制御したい場合は、UINavigationController をサブクラス化し、preferredStatusBarStyle を実装して、topViewController の設定を返すようにします。
ストーリーボード シーンのクラス参照を UINavigationController からサブクラスに変更してください (たとえば、以下の例の MyNavigationController)。
(以下は私にとってはうまくいきます。アプリがTabBarベースの場合、UITabBarControllerをサブクラス化することで同様のことをしたいと思うでしょうが、私はそれを試していません).
@interface MyNavigationController : UINavigationController
@end
@implementation MyNavigationController
- (UIStatusBarStyle)preferredStatusBarStyle
{
return self.topViewController.preferredStatusBarStyle;
}
@end
スウィフト 3 - Xcode 8。
起動画面で最初にステータスバーを非表示にしたい場合は、これを試してください。
ステップ 1:に以下を追加しますinfo.plist
。
View controller-based status bar appearance
価値NO
Status bar is initially hidden
価値YES
ステップ 2:これをdidFinishLaunchingWithOptions
メソッドに記述します。
UIApplication.shared.isStatusBarHidden = false
UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent
これは info.plist から実行できます。
1) 「コントローラベースのステータスバーの外観を表示する」を「いいえ」に設定
2) 「ステータスバーのスタイル」を「UIStatusBarStyleLightContent」に設定
終わり
iOS 13 ソリューション
UINavigationController
はUIViewController
(誰が知っていた) のサブクラスです!
したがって、Navigation Controller に埋め込まれた View Controller を表示する場合、実際には埋め込まれた View Controller を表示しているわけではありません。あなたはナビゲーションコントローラーを提示しています!UINavigationController
は、 のサブクラスとしてUIViewController
、 と を継承preferredStatusBarStyle
しchildForStatusBarStyle
ます。これらは必要に応じて設定できます。
次の方法のいずれかが機能するはずです。
- ダークモードを完全にオプトアウトする
info.plist
に、次のプロパティを追加します 。- キー -
UIUserInterfaceStyle
(別名「ユーザー インターフェース スタイル」) - 値 - 光
- キー -
preferredStatusBarStyle
内でオーバーライドUINavigationController
preferredStatusBarStyle
( doc ) - ビュー コントローラーの優先ステータス バー スタイルサブクラスまたは拡張
UINavigationController
class MyNavigationController: UINavigationController { override var preferredStatusBarStyle: UIStatusBarStyle { .lightContent } }
また
extension UINavigationController { open override var preferredStatusBarStyle: UIStatusBarStyle { .lightContent } }
childForStatusBarStyle
内でオーバーライドUINavigationController
childForStatusBarStyle
( doc ) - システムがステータスバーのスタイルを決定するために使用する View Controller を必要とするときに呼び出されます- Appleのドキュメントによると、
「コンテナー ビュー コントローラーがその子ビュー コントローラーの 1 つからステータス バー スタイルを派生させる場合、[このプロパティをオーバーライド] し、その子ビュー コントローラーを返します。nil を返すか、このメソッドをオーバーライドしない場合、self のステータス バー スタイルが使用されます。 。このメソッドからの戻り値が変更された場合は、setNeedsStatusBarAppearanceUpdate() メソッドを呼び出してください。"
- つまり、ここで解決策 3 を実装しない場合、システムは上記の解決策 2 にフォールバックします。
サブクラスまたは拡張
UINavigationController
class MyNavigationController: UINavigationController { override var childForStatusBarStyle: UIViewController? { topViewController } }
また
extension UINavigationController { open override var childForStatusBarStyle: UIViewController? { topViewController } }
上記の任意のビュー コントローラーを返すことができます。次のいずれかをお勧めします。
注: をサブクラス化する場合はUINavigationController
、IB の ID インスペクターを使用して、そのクラスをナビゲーション コントローラーに適用することを忘れないでください。
PSこれはiOS 13で動作します
UINavigationController を使用する場合、iOS 9 と Swift 2.0 でこれを作成します
self.navigationController?.navigationBar.barStyle = UIBarStyle.Black
そして、モーダルセグエを使用する場合はこれを作成します
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent
}
アプリケーションがUIStatusBarStyleLightContent
デフォルトで持つ必要があるが、それでもUIStatusBarStyleDefault
一部の画面で使用できるようにしたい場合は、コントローラー レベルでステータス バーの色を管理することを選択できますが、この場合preferredStatusBarStyle
はすべてのビューで上書きする必要があります。コントローラー (または、他のすべてのビュー コントローラーが継承するベース ビュー コントローラーに実装します)。この問題を解決する別の方法を次に示します。
- plistに
UIViewControllerBasedStatusBarAppearance
toを設定しますNO
UIStatusBarStyle
に設定UIStatusBarStyleLightContent
すべてのビュー コントローラーは、ステータス バーに白いテキストを使用します。黒いテキストのステータス バーが必要なビュー コントローラーにのみ、このメソッドを追加します。
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}
これは私のために働いた:
に を設定
UIViewControllerBasedStatusBarAppearance
しYES
ますplist
メソッドの
rootViewController
実装が必要です-(UIStatusBarStyle)preferredStatusBarStyle
私rootViewController
は Cocoapods ( JASidePanelController
) によって管理されているため、カテゴリを介してこのメソッドを追加しました。
#import "JASidePanelController+StatusBarStyle.h"
@implementation JASidePanelController (StatusBarStyle)
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
@end
.plist ファイルのビュー コントローラー ベースのステータス バーの外観を削除し(作成した場合)、再作成します。
ステータスバーのスタイルを不透明な黒のスタイルに設定
appDelegate で、didFinishLaunching の下に次のコードを追加します。
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
変更するだけ1) Info.plist
コントローラーベースのステータスバーを表示appearance
->NO
書き込み
2)
[[UIApplication
sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];
の
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Swiftとナビゲーションコントローラーのために私がしなければならなかったこと
extension UINavigationController {
override open var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
ステータスバーの色を変えるとても簡単な方法。ナビゲーション コントローラーのサブクラスを作成します。
このコードをビューの didload メソッドに記述します。すべてのView Controllerでこのコードを有効にします
self.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName :
[UIColor whiteColor],
NSFontAttributeName:[UIFont boldSystemFontOfSize:19]};