Changer la couleur de fond de la barre D'État dans Swift 3

Dans Le XCode 7.3.x change la couleur de fond pour mon 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 il me donne:

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

avez-vous des idées pour la modifier avec Xcode8/Swift 3.0?

31
demandé sur Krunal 2016-10-01 05:28:24

8 réponses

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

UIApplication.shared.statusBarView?.backgroundColor = .red
118
répondu Callam 2018-03-29 11:28:06

barre d'état"Change" couleur de fond:

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)

modifier la barre d'État couleur du texte:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

mise à Jour: veuillez noter que le cadre de la barre d'état change lorsque la vue est tournée. Vous pouvez mettre à jour le cadre subview créé par:

  • à l'aide du masque d'autorégression: statusBarView.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]
  • observation NSNotification.Name.UIApplicationWillChangeStatusBarOrientation
  • Ou remplacement de viewWillLayoutSubviews()
29
répondu Daniel Illescas 2018-04-02 22:03:08

iOS 11 et Xcode 9 utilisez les étapes suivantes.

  1. créer une extension UIApplication catégorie:

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

  2. dans votre classe ou partout où vous voulez changer la couleur de fond de la barre D'État:

    UIApplication.shared.statusBarView?.backgroundColor = .red

  3. pour le contenu clair ou le contenu foncé de la barre d'état, allez simplement à Info.plist et ajoutez la ligne de valeur avec la valeur NO.

afficher l'apparence de la barre d'état basée sur le contrôleur

  1. maintenant, il suffit de définir le contenu de la lumière ou tout ce dont vous avez besoin dans le onglet Général des paramètres de votre projet.
5
répondu Asfand Shabbir 2018-02-17 17:33:32

Essayez ceci

Goto votre application info.plist

  1. réglez l'apparence de la barre d'état basée sur le contrôleur À NO
  2. définir le style de barre D'État à UIStatusBarStyleLightContent

puis allez à votre délégué d'application et collez le code suivant où vous mettez le Controller RootViewController de votre 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];
}
3
répondu Vipin 2016-10-01 03:51:57

pour Xcode 9 et iOS 11: Le style de la barre d'état que nous allons essayer d'atteindre est une barre d'état avec un contenu blanc. Allez au ViewController.swift et ajouter les lignes de code suivantes.

override var preferredStatusBarStyle: UIStatusBarStyle {

     return .lightContent

}

ou à partir de l'option Paramètres du projet, vous pouvez changer le style de la barre d'état:

enter image description here

suivant, retourner au Storyboard, sélectionner le contrôleur de vue et dans le menu Editeur sélectionner intégrer dans le contrôleur de Navigation. Sélectionnez la barre de Navigation et, dans L'attribut Inspector, définissez la couleur de la teinte de la barre au rouge. Le scénario ressemblera à ça. enter image description here

construire et exécuter le projet, le contenu de la barre d'état est de nouveau sombre, ce qui est la valeur par défaut. La raison en est que iOS a demandé le style de la barre d'état du contrôleur de navigation au lieu du contrôleur de vue contenue.

enter image description here

Pour changer le style de tous les Controllers de navigation à l'intérieur de l'app, changez la méthode suivante dans L'AppDelegate.fichier swift.

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    UINavigationBar.appearance().barStyle = .blackOpaque
    return true
    }

Construisez et exécutez le projet à nouveau, cette fois le contenu de la barre d'état changé en blanc.

enter image description here

3
répondu Jamil Hasnine Tamim 2018-02-04 06:08:45
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any] ?) -> Bool {
    // Override point for customization after application launch.

    UINavigationBar.appearance().barStyle = .blackOpaque
    return true
}

cela fonctionne pour moi, car ma navigation barTintColor était noire et incapable de voir la barre d'état.

lorsqu'elle est définie au-dessus du code, la barre d'état finishlaunch apparaît en blanc.

2
répondu ioSana 2018-06-13 09:14:16

Avec l'aide de Swift 3 et 4 vous pouvez utiliser l'extrait de code ci-dessous. Il retrouve la vue à partir de UIApplication en utilisant valueForKeyPath tel que défini, c'est la 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];
}
1
répondu abdullahselek 2018-08-10 14:02:30

Vous pouvez définir la couleur de fond pour la barre d'état pendant le 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

0
répondu Krunal 2018-06-13 09:16:38