web-dev-qa-db-fra.com

PreferredStatusBarStyle ne fonctionne pas

J'avais l'habitude d'utiliser setStatusBarStyle dans mon projet et cela fonctionne bien, mais il est obsolète, donc j'utilise preferredStatusBarStyle, cela n'a pas fonctionné. sachant que j'ai:

  1. Appelez la méthode setNeedsStatusBarAppearanceUpdate.
  2. Définissez "Afficher l'apparence de la barre d'état basée sur le contrôleur" sur NON dans info.plist
  3. Remplacer la fonction

    • (UIStatusBarStyle) PreferredStatusBarStyle {return UIStatusBarStyleLightContent; }

    cette fonction n'est pas appelée

Remarque: j'utilise le contrôleur de navigation.

8
Sarah

Voici Apple Guidelines/Instruction sur le changement de la barre d'état.

Si vous souhaitez définir le style de la barre d'état, au niveau de l'application, définissez UIViewControllerBasedStatusBarAppearance sur NO dans votre .plist fichier. Et dans votre appdelegate> didFinishLaunchingWithOptions ajoutez les ines suivants (par programme, vous pouvez le faire à partir du délégué d'application).

Objectif C

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

Rapide

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

si vous souhaitez définir le style de la barre d'état, au niveau du contrôleur de vue, procédez comme suit:

  1. Définissez UIViewControllerBasedStatusBarAppearance sur YES dans .plist fichier, si vous devez définir le style de la barre d'état au niveau UIViewController uniquement.
  2. Dans la fonction d'ajout de viewDidLoad - setNeedsStatusBarAppearanceUpdate

  3. remplacez PreferredStatusBarStyle dans votre contrôleur de vue.

Objectif C

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

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

Rapide

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Définissez la valeur de .plist en fonction du niveau de configuration du style de la barre d'état.

enter image description here


Vous pouvez définir la couleur d'arrière-plan de la barre d'état lors du lancement de l'application ou pendant viewDidLoad de votre contrôleur de vue.

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
    }

}



Voici le résultat:

enter image description here


29
Krunal