web-dev-qa-db-ja.com

iOS 13ステータスバースタイル

IOS 13のViewControllerレベルごとにステータスバーのスタイルを変更したいのですが、これまでのところ、うまくいきませんでした。
info.plistでUIUserInterfaceStyleLightとして定義し(ダークモードをサポートしたくないため)、UIViewControllerBasedStatusBarAppearancetrueに設定します。 preferredStatusBarStyleはViewControllerで呼び出されますが、完全に無視されます。 UIUserInterfaceStyleは常にVC設定をオーバーライドしているようです。iOS13でViewControllerごとのステータスバーのスタイルを機能させるにはどうすればよいですか?それともサポートされていませんか?

17
Micky

iOS 13.2、Swift 5.1

私にとって、前述の解決策からは何もうまくいきませんでした。 5時間後、私は modalPresentationCapturesStatusBarAppearance フラグで終了しました。

    destinationNavigationController.modalPresentationCapturesStatusBarAppearance = true
    sourceViewController.present(destinationNavigationController, animated: animated, completion: nil)

この後、preferredStatusBarStylepresentedVCで呼び出されました。

override var preferredStatusBarStyle: UIStatusBarStyle {
    if #available(iOS 13.0, *) {
        if traitCollection.userInterfaceStyle == .light {
            return .darkContent
        } else {
            return .lightContent
        }
    } else {
        return .lightContent
    }
}
5
bezoadam

IOS13では、UIStatusBarStyleに.darkContentオプションが追加されました。黒いテキストの場合、preferredStatusBarStyleに(.defaultの代わりに)これを使用します。

3
Harris

IOS13では同じ問題が発生しましたが、iOS12では問題ありませんでした。 3つのNavigationBarControllerを保持するTabBarControllerがあり、以前のViewControllerからのTabBarControllerを提示しています。プレゼンテーション時に.modalPresentationStyleを.fullScreenに設定することで修正しました。

tabbarController.modalPresentationStyle = .fullScreen

多分それは何らかの形であなたを助けるでしょう...

2

私の場合、UIStatusBarStyleが正しくないという同様の問題がありました。アプリの一部のビューコントローラーでは、現在のシステムカラーモードを無視して、暗いステータスバースタイルを設定する必要があります。問題は私が使用した.default値ですが、iOS 13ではコンテキストによって異なります。そのため、iOS 12およびiOS 13以降のケースを処理するための小さな回避策を追加しました。

private extension UIStatusBarStyle {

    static var darkContentWorkaround: UIStatusBarStyle {
        if #available(iOS 13.0, *) {
            return .darkContent
        } else {
            return .default
        }
    }

}
1

ナビゲーションコントローラーを使用しているときにiOS 13で同じ問題が発生しました。ステータスバーの色を変更できました。

let navBarAppearance = UINavigationBarAppearance()

navigationBar.scrollEdgeAppearance = navBarAppearance

しかし問題は、現在のコントローラーを使用していたときにステータスバーが変更されなかったため、トップビューコントローラーでこのコードを使用しました

func viewDidAppear(_ animated:Bool){

    if #available(iOS 13, *)
    {
        let statusBar = UIView(frame: (UIApplication.shared.keyWindow?.windowScene?.statusBarManager?.statusBarFrame)!)
        statusBar.backgroundColor = UIColor.systemBackground
        UIApplication.shared.keyWindow?.addSubview(statusBar)
    }
}

「UIColor.systemBackground」で自分の色を使用できます

0
Dante