Swiftアプリのステータスバーの色を白に変更しようとしていますが、レンガの壁に当たっています。 NavigationControllerにそれぞれ埋め込まれた3つのViewControllerがあります(問題になる可能性がありますか?すでにNavigationControllerクラスにコードを配置しようとしました。)AppDelegateのdidFinishLaunchingWithOptionsで次のコードの両方を試しました。 .Swiftファイルですが、どちらも機能しませんでした。
application.statusBarStyle = .LightContent
そして
UIApplication.sharedApplication().statusBarStyle = .LightContent
Docsが言わなければならないことは、UIBarButtonStyleがIntであり、この列挙型スニペットを提供してくれたことです。
enum UIStatusBarStyle : Int {
case Default
case LightContent
case BlackOpaque
}
私は何が欠けていますか?
2つのオプションがあります。
ステータスバーのスタイルを手動で設定し続ける場合は、作業を続けますが、次のキーをNO
の値でinfo.plistファイルに追加する必要があります。
コントローラーベースのステータスバーの外観を表示する
または、アプリケーションのstatusBarStyleを設定する代わりに、View Controllerベースのステータスバーの外観を引き続き使用する場合は、ステータスバースタイルを指定する各View ControllerのpreferredStatusBarStyle
プロパティをオーバーライドします。
Swift
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
スイフト2
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
Swift 3.
appDelegate.Swift didFinishLaunchingWithOptionsで
UIApplication.shared.statusBarStyle = .lightContent
Info.plist
View controller-based status bar appearance -> NO
Swift 2.2
appDelegate.Swift didFinishLaunchingWithOptionsで
UIApplication.sharedApplication().statusBarStyle = .LightContent
Info.plist
View controller-based status bar appearance -> NO
以下を設定する必要があります。
navigationController.navigationBar.barStyle = .black
テキストは白で表示されます
IOS9.xおよびXcode7の場合、これをAppDelegate.Swift
内に配置するだけです。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
UINavigationBar.appearance().barStyle = .Black
}
これにより、UINavigationController内のすべてのView Controllerのステータスバーのスタイルが自動的に.Lightcontent
に変わります。
(また、Info.plistからView controller-based status bar appearance
を削除して、おそらく表示される警告を抑制します!)
Swift 3では、ステータスバーのスタイルがUIViewControllerの計算プロパティに変更され、次のようにオーバーライドできます。
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent //or default
}
IOS 9では、次の(setStatusBarStyle)は非推奨であり、そのようにすると警告が表示されます。
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
すべてのstatusBarsを一度に変更したい場合は、Info.plistに次を追加してみてください。これにより、起動画面のステータスバーも白になります。上記のコードではできません。
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
上記のすべては、追加するまで動作しませんでした:
self.navigationController?.navigationBar.barStyle = .black;
そう:
.plist
でUIViewControllerBasedStatusBarAppearance
をYES
に設定しますviewDidLoad
でself.setNeedsStatusBarAppearanceUpdate();
を呼び出しますoverride var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
navigationBar.barStyle
も設定するのでfinaloverride var preferredStatusBarStyle: UIStatusBarStyle { self.navigationController?.navigationBar.barStyle = .black;//or default return .lightContent //or default }
これが機能しない場合は、UINavigationController
extension
を追加してみてください:
extension UINavigationController
{
override open var preferredStatusBarStyle: UIStatusBarStyle {
if let lastVC = self.viewControllers.last
{
return lastVC.preferredStatusBarStyle
}
return .default
}
}
奇妙な、Swift 3.1およびXC8.2.1を使用していますが、上記のすべてが機能しませんでした。
私がやったことはただ
extension UINavigationController
{
override open var preferredStatusBarStyle: UIStatusBarStyle {
get {
return .lightContent
}
}
}
いいえ、Plist、他のものはありません。 HTH
Swift 3.0では、View Controllerベースのステータスバーの外観について、ViewControllerのゲッターをオーバーライドできます。
override var preferredStatusBarStyle: UIStatusBarStyle {
get { return .lightContent }
}
手順1. info.plistに追加View controller-based status bar appearance -> NO
ステップ2.ステータスバーの色を変更する必要があるメソッドにコードを追加します。
UIApplication.shared.statusBarStyle = .lightContent //(or .default)
setNeedsStatusBarAppearanceUpdate()
コードのキー行:setNeedsStatusBarAppearanceUpdate()
Info.plistを編集しないでください。これをViewController.Swiftに追加します。
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}