web-dev-qa-db-ja.com

UIStatusBarStyleがSwiftで機能しない

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
}

私は何が欠けていますか?

84
davidrayowens

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
}
144
Mick MacCallum

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
143
Maselko

以下を設定する必要があります。

navigationController.navigationBar.barStyle = .black

テキストは白で表示されます

31
Nico S.

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を削除して、おそらく表示される警告を抑制します!)

20
Biodave

Swift 3では、ステータスバーのスタイルがUIViewControllerの計算プロパティに変更され、次のようにオーバーライドできます。

override var preferredStatusBarStyle: UIStatusBarStyle {
   return .lightContent //or default
} 
15
Eric Welander

IOS 9では、次の(setStatusBarStyle)は非推奨であり、そのようにすると警告が表示されます。

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)

すべてのstatusBarsを一度に変更したい場合は、Info.plistに次を追加してみてください。これにより、起動画面のステータスバーも白になります。上記のコードではできません。

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
12
GuiSoySauce

上記のすべては、追加するまで動作しませんでした:

self.navigationController?.navigationBar.barStyle = .black;

そう:

  1. .plistUIViewControllerBasedStatusBarAppearanceYESに設定します
  2. viewDidLoadself.setNeedsStatusBarAppearanceUpdate();を呼び出します
  3. PreferredStatusBarStyleをオーバーライドします
    override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
  4. オーバーライドされたメソッドでは、navigationBar.barStyleも設定するのでfinal
    forlightコンテンツ:
    override var preferredStatusBarStyle: UIStatusBarStyle { self.navigationController?.navigationBar.barStyle = .black;//or default return .lightContent //or default }
    andblackコンテンツはデフォルトを使用

here および here からのソース。

これが機能しない場合は、UINavigationControllerextensionを追加してみてください:

extension UINavigationController
{
    override open var preferredStatusBarStyle: UIStatusBarStyle {
        if let lastVC = self.viewControllers.last
        {
            return lastVC.preferredStatusBarStyle
        }

        return .default
    }
}
9

奇妙な、Swift 3.1およびXC8.2.1を使用していますが、上記のすべてが機能しませんでした。

私がやったことはただ

extension UINavigationController
{
    override open var preferredStatusBarStyle: UIStatusBarStyle {
        get {
            return .lightContent
        }
    }
}

いいえ、Plist、他のものはありません。 HTH

5
Lord iPhonius

Swift 3.0では、View Controllerベースのステータスバーの外観について、ViewControllerのゲッターをオーバーライドできます。

override var preferredStatusBarStyle: UIStatusBarStyle {
    get { return .lightContent }
}
2

手順1. info.plistに追加View controller-based status bar appearance -> NO

ステップ2.ステータスバーの色を変更する必要があるメソッドにコードを追加します。

UIApplication.shared.statusBarStyle = .lightContent //(or .default)
setNeedsStatusBarAppearanceUpdate()

コードのキー行:setNeedsStatusBarAppearanceUpdate()

1
Igor

Info.plistを編集しないでください。これをViewController.Swiftに追加します。

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.LightContent
}
1
Sev