web-dev-qa-db-ja.com

preferredStatusBarStyleが機能していません

以前はプロジェクトでsetStatusBarStyleを使用していましたが、正常に動作しますが、廃止されているため、preferredStatusBarStyleを使用しますが、動作しませんでした。私が知っていること:

  1. メソッドsetNeedsStatusBarAppearanceUpdateを呼び出します。
  2. Info.plistで「コントローラーベースのステータスバーの外観を表示」をNOに設定します。
  3. 関数をオーバーライドします

    • (UIStatusBarStyle)preferredStatusBarStyle {return UIStatusBarStyleLightContent; }

    この関数は呼び出されません

:Navigation Controllerを使用しています。

8
Sarah

Apple Guidelines/Instruction ステータスバーの変更についてです。

ステータスバーのスタイル、アプリケーションレベルを設定する場合は、.plistファイルでUIViewControllerBasedStatusBarAppearanceNOに設定します。そして、あなたのappdelegate> didFinishLaunchingWithOptionsに以下を追加します(プログラム的にアプリのデリゲートからできます)。

目的C

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

Swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    application.statusBarStyle = .lightContent
    return true
}

ビューコントローラーレベルでステータスバーのスタイルを設定する場合は、次の手順を実行します。

  1. UIViewControllerレベルでのみステータスバーのスタイルを設定する必要がある場合は、.plistファイルでUIViewControllerBasedStatusBarAppearanceYESに設定します。
  2. ViewDidLoadで関数を追加-setNeedsStatusBarAppearanceUpdate

  3. view ControllerのpreferredStatusBarStyleをオーバーライドします。

目的C

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setNeedsStatusBarAppearanceUpdate];
}

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

Swift

override func viewDidLoad() {
    super.viewDidLoad()
    self.setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

ステータスバースタイルのセットアップレベルに従って.plistの値を設定します。

enter image description here


アプリケーションの起動時またはView ControllerのviewDidLoad時にステータスバーの背景色を設定できます。

extension UIApplication {

    var statusBarView: UIView? {
        return value(forKey: "statusBar") as? UIView
    }

}

// Set upon application launch, if you've application based status bar
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
        return true
    }
}


or 
// Set it from your view controller if you've view controller based statusbar
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
    }

}



結果は次のとおりです。

enter image description here


29
Krunal