私のアプリケーションは背景が暗いのですが、iOS 7ではステータスバーが透明になりました。そのため、ステータスバーには何も表示されず、隅に緑色のバッテリーインジケータが表示されるだけです。どうすればステータスバーの文字色をホーム画面のような白に変更できますか?
1..plistファイルでUIViewControllerBasedStatusBarAppearance
をYES
に設定する。
2.2. viewDidLoad
の中で、[self setNeedsStatusBarAppearanceUpdate];
を行う。
3.以下のメソッドを追加します。
- (UIStatusBarStyle)preferredStatusBarStyle
{
UIStatusBarStyleLightContentを返す。
}
注意:これはUINavigationController
内のコントローラでは動作しません。以下の[Tyson's comment]を参照してください(https://stackoverflow.com/questions/17678881/how-to-change-status-bar-text-color-in-ios-7#comment28947732_17768797) :)
SWIFT 3 - これは、UINavigationController
内のコントローラで動作します。以下のコードをコントローラ内に追加してください。
// Preferred status bar style lightContent to use on dark background.
// Swift 3
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Swift 5とSwiftUIの場合
SwiftUIでは、HostingController.swift
という新しいswiftファイルを作成します。
import Foundation
import UIKit
import SwiftUI
class HostingController: UIHostingController<ContentView> {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
そして、SceneDelegate.swift
の中の以下のコードを変更します。
window.rootViewController = UIHostingController(rootView: ContentView())
を
window.rootViewController = HostingController(rootView: ContentView())
これはiOS 7 UI Transition Guideに記載されており、直接アクセスするにはAppleのデベロッパーIDが必要となります。該当する部分を抜粋します。
UIStatusBarStyle定数を使用します。[UIStatusBarStyle
定数を使用して、ステータスバーのコンテンツを暗くするか明るくするかを指定します。
UIStatusBarStyleDefault` は暗いコンテンツを表示します。[...]
UIStatusBarStyleLightContent
は、明るいコンテンツを表示します。暗いコンテンツがステータスバーの後ろにある場合に使用します。
また、興味があるかもしれません。
iOS 7では、ステータスバーのスタイルを個々のビューコントローラから制御し、アプリの実行中に変更することができます。この動作を有効にするには、アプリの
Info.plist
ファイルにUIViewControllerBasedStatusBarAppearance
キーを追加し、値をYES
にします。
AppleのデベロッパーIDでアクセスできるドキュメントに目を通しておくことをお勧めします。
これは、現在のXcodeとiOS 7のビルドに問題があるようです。
Apple's Developer Forumsでの関連コンテンツは、a search for UIStatusBarStyleLightContent in "iOS 7 Beta Livability" on the Apple Developer Forums*(現在32件の投稿があります)。
ライト版に設定しようとして出てきました。
(これはAaron'さんの回答のフォローアップに過ぎません。)