63 votes

Changer la couleur d'arrière-plan de la barre d'état dans Swift 3

Dans XCode 7.3.x, ill a changé la couleur d’arrière-plan de ma StatusBar avec:

 func setStatusBarBackgroundColor(color: UIColor) {
guard  let statusBar = UIApplication.sharedApplication().valueForKey("statusBarWindow")?.valueForKey("statusBar") as? UIView else {
    return
}
statusBar.backgroundColor = color
}
 

Mais il semble que cela ne fonctionne plus avec Swift 3.0.

J'ai essayé avec:

 func setStatusBarBackgroundColor(color: UIColor) {
guard  let statusBar = (UIApplication.shared.value(forKey: "statusBarWindow") as AnyObject).value(forKey: "statusBar") as? UIView else {
    return
}
statusBar.backgroundColor = color
}
 

Mais ça me donne:

 this class is not key value coding-compliant for the key statusBar.
 

Des idées pour le changer avec XCode8 / Swift 3.0?

159voto

Callam Points 7707
extension UIApplication {
    var statusBarView: UIView? {
        if responds(to: Selector("statusBar")) {
            return value(forKey: "statusBar") as? UIView
        }
        return nil
    }
}

UIApplication.shared.statusBarView?.backgroundColor = .red

63voto

Daniel Illescas Points 1709

Couleur de fond de la barre d'état "Changer":

 let statusBarView = UIView(frame: UIApplication.shared.statusBarFrame)
let statusBarColor = UIColor(red: 32/255, green: 149/255, blue: 215/255, alpha: 1.0)
statusBarView.backgroundColor = statusBarColor
view.addSubview(statusBarView)
 

Changer la couleur du texte de la barre d'état:

 override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
 

Mise à jour: veuillez noter que le cadre de la barre d'état changera lors de la rotation de la vue. Vous pouvez mettre à jour le cadre de sous-vue créé en:

  • Utilisation du masque de redimensionnement automatique: statusBarView.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]
  • Observant NSNotification.Name.UIApplicationWillChangeStatusBarOrientation
  • Ou remplacer viewWillLayoutSubviews()

31voto

abdullahselek Points 3161

Avec Swift 3 et 4, vous pouvez utiliser l’extrait de code ci-dessous. Il trouve la vue dans UIApplication utilisant valueForKeyPath comme couleur de fond.

 guard let statusBarView = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView else {
        return
    }
statusBarView.backgroundColor = UIColor.red
 

Objectif c

 UIView *statusBarView = [UIApplication.sharedApplication valueForKeyPath:@"statusBarWindow.statusBar"];
if (statusBarView != nil)
{
    statusBarView.backgroundColor = [UIColor redColor];
}
 

5voto

Asfand Shabbir Points 628

Pour iOS 11 et Xcode 9 utilisez les étapes suivantes.

  1. créer une extension à UIApplication classe:

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

  2. Dans votre classe ou de l'endroit où vous souhaitez modifier la barre d'État la couleur d'arrière-plan:

    UIApplication.shared.statusBarView?.backgroundColor = .red

  3. Pour la lumière du contenu ou sombre contenu de la barre d'état tout simplement aller à l' Info.plist et ajoutez la ligne de valeur avec la valeur AUCUN.

- Vue-contrôleur d'état basé sur l'apparence de la barre de

  1. Maintenant, il suffit de régler la lumière du contenu ou de tout ce dont vous avez besoin dans l' Onglet Général de vos paramètres du projet.

2voto

iOSDev Points 325

Essaye ça

Allez à votre application info.plist

  1. Définissez l'apparence de la barre d'état du contrôleur View sur NO.
  2. Définissez le style de la barre d'état sur UIStatusBarStyleLightContent

Ensuite, allez dans le délégué de votre application et collez le code suivant dans lequel vous définissez le contrôleur RootViewController de Windows.

 #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
    UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width, 20)];
    view.backgroundColor=[UIColor blackColor];
    [self.window.rootViewController.view addSubview:view];
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X