Comment changer la couleur du texte de la barre d'état dans iOS

990

Mon application a un fond sombre, mais dans iOS 7, la barre d'état est devenue transparente. Donc, je ne vois rien là-bas, seulement l'indicateur de batterie vert dans le coin. Comment changer la couleur du texte de la barre d'état en blanc comme sur l'écran d'accueil?

Oleksandr Veremchuk
la source
9
Ce lien contient des informations intéressantes sur cette question: doubleencore.com/2013/09/…
Adriano Lucas

Réponses:

1380
  1. Réglez le UIViewControllerBasedStatusBarAppearancepour YESdans le fichier .plist.

  2. Dans le viewDidLoaddo a[self setNeedsStatusBarAppearanceUpdate];

  3. Ajoutez la méthode suivante:

    - (UIStatusBarStyle)preferredStatusBarStyle
    { 
        return UIStatusBarStyleLightContent; 
    }

Remarque : cela ne fonctionne pas pour les contrôleurs à l'intérieur UINavigationController, veuillez voir le commentaire de Tyson ci-dessous :)

Swift 3 - Cela fonctionnera à l'intérieur des contrôleurs UINavigationController. Ajoutez ce code dans votre contrôleur.

// Preferred status bar style lightContent to use on dark background.
// Swift 3
override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Swift 5 et SwiftUI

Pour SwiftUI, créez un nouveau fichier swift appelé HostingController.swift

import Foundation
import UIKit
import SwiftUI

class HostingController: UIHostingController<ContentView> {
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}

Modifiez ensuite les lignes de code suivantes dans le SceneDelegate.swift

window.rootViewController = UIHostingController(rootView: ContentView())

à

window.rootViewController = HostingController(rootView: ContentView())
Peter B. Kramer
la source
78
Je n'avais pas besoin de l'étape 2.
Jason Moore
37
Ne semble pas fonctionner sur iOS 7 Beta 5 avec Xcode5-DP5. preferStatusBarStyle ne semble pas être appelé.
wilsontgh
18
UIViewControllerBasedStatusBarAppearance est remplacé par Afficher l'apparence de la barre d'état basée sur le contrôleur dans Xcode 5 GM seed
parilogic
42
Vous avez la réponse pour Xcode GM Seed: 1. Dans Info.plist, affichez l'apparence de la barre d'état basée sur le contrôleur comme NON 2. Dans appDelegate, dans la méthode appDidFinishLaunching, mettez [[Apparence UIView] setTintColor: [UIColor whiteColor]];
parilogic
101
UINavigationController est un cas spécial, ce qui précède ne fonctionnera pas. Je viens de passer des heures à me gratter la tête. Voir ici pour la solution: stackoverflow.com/a/19513714/505457
Tyson
848

Vous pouvez également désactiver l'apparence de la barre d'état basée sur le contrôleur de vue:

  1. Réglez View controller-based status bar appearancesur NOvotre Info.plist.
  2. Appel [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Remarque: cette méthode est déconseillée dans iOS9. Utilisez- preferredStatusBarStylele à la place sur UIViewController. (voir Apple Developer Library )

wilsontgh
la source
16
C'est un itinéraire bien meilleur et plus facile.
Mick Byrne
227
Pas besoin de coder. Tout peut être fait à partir de la liste: (1) définissez "Afficher l'apparence de la barre d'état basée sur le contrôleur" sur NON et (2) définissez "Style de la barre d'état" sur "Style noir opaque". (Les valeurs brutes sont UIViewControllerBasedStatusBarAppearance -> NO et UIStatusBarStyle -> UIStatusBarStyleBlackOpaque)
SwiftArchitect
3
Notez que vous devez définir la valeur info.plist pertinente sur NO pour que cela fonctionne.
Abhi Beckert
9
@gothicdev: belle prise. Accepterait votre réponse car elle est la plus propre. L'option d'éclairage pour le style de barre pourrait être: UIStatusBarStyleLightContent
benka
9
Cette méthode est déconseillée dans iOS 9.
lostAtSeaJoshua
439

Vous pouvez le faire sans écrire de ligne de code!
Procédez comme suit pour rendre la couleur du texte de la barre d'état blanche dans toute l'application

Sur votre fichier plist de projet :

  • Style de barre d'état: Transparent black style (alpha of 0.5)
  • Afficher l'apparence de la barre d'état basée sur le contrôleur: NO
  • La barre d'état est initialement masquée: NO
Lucas
la source
12
Je ne sais pas si les choses ont changé, mais la valeur UIStatusBarStyleLightContent n'est pas reconnue par XCode, et ne se trouve dans aucune documentation ... Bien qu'elle semble fonctionner.
Nathan H
5
Celui-ci l'a également changé sur l'écran de démarrage, alors que le configurer sur le navigateur ne le ferait pas ... Bravo!
viniciusnz
3
Certainement le moyen le plus simple de le faire et, comme mentionné, fonctionne également sur l'écran de démarrage.
7wonders
4
Il n'y a rien appelé UIStatusBarStyleLightContentdans le plist infoHOWEVER Transparent Blackqui fait la même astuce :) plus, vous devez ajouter View controller-based status bar appearancecar il n'est pas là à l'origine et c'est tout ce dont vous avez besoin pour le faire fonctionner :)
user1949873
45
Pour les paresseux comme moi, copiez et passez: <key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
Adam Waite
241

Remarque: la réponse la plus votée ne fonctionne pas pour iOS 7/8

Dans Info.plist, définissez «Afficher l'apparence de la barre d'état basée sur le contrôleur» sur NON

Dans AppDelegate, ajoutez

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

à

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
   ......
   ...
}    

Cette solution fonctionne pour iOS 7/8

Pradeep Mahdevu
la source
10
Déconseillé dans iOS 9.: - /
sudo make install
112

Pour moi, rien ne s'est produit avec l'utilisation de toutes les choses dans les autres réponses (et d'autres sources / documentation). Ce qui a aidé, c'est de définir le style de barre de navigation sur "Noir" dans le XIB. Cela a changé le texte en blanc sans aucun code.

Entrez la description de l'image ici

haraldmartin
la source
3
Dans l'appareil, aucune des réponses ci-dessus n'a fonctionné pour moi, sauf celle-ci. Je pense que cela dit tout sur le nouveau système que vous devez définir la barre de navigation sur NOIR pour que le texte de la barre d'état soit BLANC.
MrTJ
2
Après avoir traversé beaucoup de choses, c'est ce qui a fini par fonctionner. Le style a été défini par défaut. Changé cela et supprimé tous les autres hacks de la barre d'état et cela fonctionne.
Gujamin
1
Si vous ne souhaitez pas définir toutes vos barres de navigation dans IB, vous pouvez également définir son proxy d'apparence. [[Apparence UINavigationBar] setBarStyle: UIBarStyleBlack];
Steve Moser
3
Ne fonctionne pas pour moi dans le Storyboard iOS7. On dirait que cela pourrait être un effet secondaire de quelque chose d'autre?
Chris
Je voudrais confirmer que toutes les réponses ci-dessus n'ont pas fonctionné pour moi non plus. Après l'image, le texte de la barre d'état apparaît en blanc. Mais je répète encore une fois, les RÉPONSES ci-dessus avec Xcode 6.2 et iOS 8.2 ne fonctionnent pas.
Markus
98

Rien de tout cela n'a fonctionné pour moi, alors voici une solution de travail ...

Dans Info.plist, ajoutez une ligne:

UIViewControllerBasedStatusBarAppearanceet définissez la valeur NO.

Ensuite, dans AppDelegate in didFinishLaunchingWithOptions, ajoutez ces lignes:

[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];
stepik21
la source
Cette solution a fonctionné pour moi, contrairement à celles ci-dessus.
John Contarino
Génial mais cette UIViewControllerBasedStatusBarAppearance se convertit en la même: Afficher l'apparence de la barre d'état basée sur le contrôleur automatiquement :)
Abhishek Thapliyal
63

Vous n'avez pas besoin de faire de code pour cela

Vous devez ajouter la clé "Afficher l'apparence de la barre d'état basée sur le contrôleur" dans info.plist comme suit: entrez la description de l'image ici

& définissez son type de valeur sur Boolean & valeur sur NO. Cliquez ensuite sur les paramètres du projet, puis sur l'onglet Général et sous Informations sur le déploiement, définissez le style de barre d'état préféré sur.

entrez la description de l'image ici

C'est ça.

Ajinkya Patil
la source
1
J'ai bien aimé votre approche! Dans mon cas, j'essayais de comprendre comment rendre le style de la barre d'état léger uniquement lorsqu'il est en plein écran (sans barre de navigation). Ensuite, j'ai réalisé que tous les autres écrans devaient s'adapter au même style d'éclairage. Donc, une bonne solution consiste à définir pour le tout. Merci! (:
Igor de Lorenzi
Si vous n'avez pas besoin de changer cela pendant que votre application est en cours d'exécution. C'est la meilleure approche.
Michael
Cette approche fonctionne certainement, mais elle introduit un problème étrange sur iPad. Dans le cas où votre application prend en charge les liens profonds et lorsque vous lancez l'application via le lien profond, le backlink apparaissant sur la barre d'état disparaît.
Chitranshu Asthana du
Le meilleur et le plus simple.
Amit Kumar
la meilleure solution pour moi: D
Gold Chicken
48

Juste deux étapes comme suit:

Étape 1:

Sous l'onglet Info de la project target, Ajouter une ligne:

UIViewControllerBasedStatusBarAppearance, définissez la valeur NO.

Étape 2:

Dans le projet AppDelegate.m:

- (BOOL)application:(UIApplication *)application 
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{[application setStatusBarStyle:UIStatusBarStyleLightContent];}
folse
la source
4
J'adore cette réponse car c'est la première fois que j'utilise le
paramètre
La notation par points et ce serait parfait;)
Rivera
43

Cela fonctionne dans Golden Master iOS 7 et Xcode 5 GM seed et iOS7 SDK sorti le 18 septembre 2013 (au moins avec le contrôleur de navigation caché):

  1. Réglez the UIViewControllerBasedStatusBarAppearancesur NOdans Info.plist.

  2. Dans la ViewDidLoadméthode ou n'importe où, où voulez-vous changer le style de la barre d'état: [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Deniss Fedotovs
la source
1
Les valeurs par défaut de UIViewControllerBasedStatusBarAppearance semblent être OUI. "Les applications utilisent par défaut le nouveau système de gestion de la barre d'état basée sur le contrôleur de vue. Pour désactiver cette option, ajoutez une valeur NON pour la clé UIViewControllerBasedStatusBarAppearance à votre Info.plist." [ bgr.com/2013/09/10/ios-7-gm-change-log-release-notes/]
Zsolt
1
Ya !! Après avoir défini UIViewControllerBasedStatusBarAppearance sur NO, la barre d'état se cache dans les vues.
CashLee
Doit-il être appliqué à tous les viewdidload?
Arnlee Vizcayno
Vous pouvez l'ajouter uniquement dans la méthode didFinishLoading de appDelegates. Ou dans les premières vues, méthode viewDidLoad si vous ne voulez pas qu'elle change.
Deniss Fedotovs
1
fantastique, celui-ci a fait le travail. codage simple et excellent.
Felipe
32

Dans le cas où votre UIViewController se trouve dans un UINavigationController, vous devrez définir le BarStyle:

-[UINavigationBar setBarStyle:UIBarStyleBlack]

La réponse originale est ici

https://devforums.apple.com/message/844264#844264

Mohit Padalia
la source
Non, cela rend simplement la couleur de la barre de navigation identique à la couleur du texte de la barre d'état. Cela cache le problème, pas le résout!
wpearse
2
Dans iOS7, la barre d'état imitera UINavigationBar si la vue contient un UINavigationController, donc dans de nombreux cas, c'est la bonne réponse.
jonstaff
29

Si vous avez un contrôleur de navigation intégré créé via Interface Builder , assurez-vous de définir les éléments suivants dans une classe qui gère votre contrôleur de navigation:

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
} 

Cela devrait être tout ce dont vous avez besoin.

bernardo mat
la source
C'était la seule solution qui fonctionnait pour moi dans une application sans storyboard et sans xib. Devrait également être utile aux utilisateurs non-IB.
Johnny Sparks
2
C'était parfait pour moi quand j'avais besoin de définir le style différemment dans chaque contrôleur de vue
Ben
Si vous souhaitez conserver "Afficher l'apparence de la barre d'état basée sur le contrôleur" sur Oui, c'est la voie à suivre. Merci!
cloudsurfin
28

J'utilise Xcode 6 beta 5 sur un projet Swift , pour une application iOS 7.

Voici ce que j'ai fait et ça marche:

info.plist:

Entrez la description de l'image ici

fancoolo
la source
2
Merci, il semble que seule votre solution fonctionne avec la dernière version d'IOS7
Dekel Maman
Cette solution affiche la barre d'état lors du chargement de l'application, dans l'écran de lancement.
Juan Boero
Résolu mes problèmes dans xCode 7.1. Dernière version. Apple a oublié quelques pièces cruciales pour faire fonctionner quelque chose. Encore.
Michael
22

Dans AppDelegate.m, ajoutez ce qui suit.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

} 

Et dans le fichier Plist, définissez «Afficher l'apparence de la barre d'état basée sur le contrôleur» sur NON.

neo D1
la source
20

Simply In Appdelegate

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Vivek Sehrawat
la source
5
La seule et unique réponse qui a réellement fonctionné pour moi.
Wim Haanstra
6
Mais pour cela, nous devons désactiver l' apparence de la barre d'état basée sur le contrôleur .
iamyogish
Déconseillé dans iOS9
Dimitris
20

Eh bien, cela fonctionne vraiment comme un morceau de gâteau pour moi.

Accédez à votre application info.plist.

  1. Réglez View controller-based status bar appearancesurNO
  2. Réglez Status bar stylesurUIStatusBarStyleLightContent

Ensuite, accédez au délégué de votre application et collez le code suivant dans lequel vous définissez RootViewController de vos fenêtres.

#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,320, 20)];
    view.backgroundColor=[UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:1.0];
    [self.window.rootViewController.view addSubview:view];
}

Bingo. Ça marche pour moi.

Shahid Iqbal
la source
1
je pense que c'est la bonne réponse (la partie de la liste) ... pourquoi ajouter du code statique sur didfinishlaunchingwithoptions ... Si vous avez besoin de la même couleur pour toute l'application, c'est la bonne façon
user2387149
20
  1. Allez à Project-> Target,

  2. Réglez ensuite Status Bar Stylesur Light. Il rend la barre d'état blanche à partir de l'écran de lancement. Configuration du projet

  3. Réglez ensuite View controller-based status bar appearanceégal à NOin Info.plist.

Wanbok Choi
la source
2
La deuxième partie où vous définissez la réelle View controller-based status bar appearance equalà NOétait la pièce que je manquais. Merci
Will
18

Modification des informations PLIST Dans Swift 3, c'est très simple avec seulement 2 étapes. Accédez à votre info.plist et changez la clé View controller-based status bar appearanceen "NON". Ensuite, dans l'Appdelegate, ajoutez simplement cette ligne dans la méthode didfinishlaunchingwithoptions

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        UIApplication.shared.statusBarStyle = .lightContent
        return true
    }

cela a été déprécié dans iOS9 maintenant, vous devez remplacer cette propriété dans le rootviewcontroller

faire cela a été déconseillé dans iOS 9 devrait le faire sur le rootviewcontroller

override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
 }
James Rochabrun
la source
1
C'est juste génial bro :) Merci.
Naresh Reddy M
cette opération a été déconseillée dans iOS 9 devrait le faire sur la substitution rootviewcontroller var PreferredStatusBarStyle: UIStatusBarStyle {return .lightContent}
James Rochabrun
17

iOS 7 permet aux contrôleurs de vue individuels de déterminer l'apparence de la barre d'état, comme décrit dans la documentation du développeur Apple:

iOS 7 donne aux contrôleurs de vue la possibilité d'ajuster le style de la barre d'état pendant que l'application est en cours d'exécution. Un bon moyen de modifier dynamiquement le style de la barre d'état consiste à implémenter preferredStatusBarStyleet, dans un bloc d'animation, à mettre à jour l'apparence et l'appel de la barre d'état setNeedsStatusBarAppearanceUpdate.

La définition globale de l'apparence de la barre d'état est un processus en deux étapes.

Tout d'abord, vous devez indiquer à iOS que vous ne souhaitez pas définir l'apparence de la barre d'état vue par vue.

Ensuite, vous devez prendre les choses en main et définir le nouveau style de barre d'état globale.

Pour désactiver le contrôle de la barre d'état vue par vue, vous devez définir la View controller-based status bar appearancepropriété dansInfo.plist .

Ouvrez le Navigateur de projet et sélectionnez le projet pour votre application iOS, puis sélectionnez l'onglet Infos.

Passez la souris sur une ligne, puis cliquez sur le signe plus qui apparaît pour ajouter une nouvelle propriété à votre .plist .

Entrez View controller-based status bar appearancedans le champ Clé, puis assurez-vous que le champ Type est défini sur Boolean. Enfin, entrezNO dans le champ Valeur.

Pour définir un style global pour la barre d'état, ajoutez une autre propriété sous l'onglet Info avec une clé de Status bar style, un type de Stringet une valeur de Opaque black style.

Voici un article de blog avec un peu plus de détails et quelques exemples de code:

http://codebleep.com/setting-the-status-bar-text-color-in-ios-7/

Josh Earl
la source
Merci. Mon problème était que je ne voyais pas que le type "Afficher l'apparence de la barre d'état basée sur le contrôleur" était défini sur Chaîne. La modification du fichier .plist "à la main" et la mise en valeur booléenne ont clarifié les choses.
Chris Prince
12

Pas besoin de faire plus, écrivez simplement ce code dans votre viewController et obtenez la couleur de la barre d'état blanc

- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
Mohit Tomar
la source
Mettez cela sous ViewController.m après l'implémentation. C'est le plus simple et fonctionne très bien! Merci Mohit!
Phil Mulkins
12

Réponse mise à jour pour Xcode GM Seed:

  1. En Info.plistvente View controller-based status bar appearancecommeNO

  2. Dans le projet, définissez:

    Entrez la description de l'image ici

  3. Dans ViewDidLoad:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

parilogique
la source
Cela a changé la barre d'onglets, pas la barre d'état pour moi.
Keith
11

Je pense que toutes les réponses ne pointent pas vraiment le problème car elles fonctionnent toutes dans des scénarios spécifiques. Mais si vous devez couvrir tous les cas, suivez les points ci-dessous:

Selon l'endroit où vous avez besoin du style d'éclairage de la barre d'état, vous devez toujours avoir à l'esprit ces 3 points:

1) Si vous avez besoin de la barre d'état sur l'écran de lancement ou dans d'autres endroits, où vous ne pouvez pas la contrôler (pas dans les contrôleurs de vue, mais plutôt certains éléments / moments contrôlés par le système comme l'écran de lancement) Vous allez dans les paramètres de votre projet Paramètres du projet

2) si vous avez un contrôleur à l'intérieur d'un contrôleur de navigation Vous pouvez le changer dans le générateur d'interface comme suit:

a) Sélectionnez la barre de navigation de votre contrôleur de navigation Sélectionnez la barre de navigation de votre contrôleur de navigation

b) Ensuite, définissez le style de la barre de navigation sur "Noir", car cela signifie que vous aurez un "noir" -> fond sombre sous votre barre d'état, donc il mettra la barre d'état sur blanc

entrez la description de l'image ici

Ou faites-le dans le code comme suit

navigationController?.navigationBar.barStyle = UIBarStyle.Black

3) Si vous avez le contrôleur seul qui doit avoir son propre style de barre d'état et qu'il n'est pas intégré dans une structure de conteneur en tant que UINavigationController

Définissez le style de la barre d'état dans le code du contrôleur:

Définition du style de la barre d'état dans le code

Fumseck
la source
veuillez expliquer votre cas et j'essaierai de vous aider
Fawkes
1
J'ai dû ajouter StatusBarIsIntiallyHidden = NO à la liste ainsi que ViewControllerBasedApplicationStatusBarAppearnce = NO à la liste. Ensuite, cela fonctionne en utilisant la première partie
Michael
Aviez-vous un écran de démarrage qui a la même "image" que le premier contrôleur de vue de chargement? Et aussi, dans la section "Info" de votre cible, vous pouvez essayer de définir la "Masquer la barre d'état" sur false et éviter de traiter votre .plist. Drapeau "StatusBarIsIntiallyHidden"
Fumseck
Non. Il utilise le xib généré par défaut.
Michael
J'ai en fait trouvé ce problème lors de la création d'un nouveau projet dans xCode 7.1, c'est pourquoi je pensais que c'était si étrange
Michael
10

Appelez simplement

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];

dans le

-(BOOL)application:(UIApplication *)application 
           didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}

méthode de mes AppDelegatetravaux idéal pour moi dans iOS7.

Cagdas Altinkaya
la source
Wow, beaucoup de merde ici, mais cette réponse a fonctionné pour moi. J'utilise Xcode 6 et iOS 8 SDK
Ethan Parker
1
Excellent, fonctionne pour moi dans iOS 9 avecView controller-based status bar appearance = NO
dstudeba
9

Ceci est documenté dans le Guide de transition de l'interface utilisateur iOS 7 , auquel vous avez besoin d'un ID de développeur Apple pour accéder directement. L'extrait pertinent:

Parce que la barre d'état est transparente, la vue derrière elle apparaît. [...] Utiliser unUIStatusBarStyle constante pour spécifier si le contenu de la barre d'état doit être sombre ou clair:

UIStatusBarStyleDefaultaffiche un contenu sombre. [...]

UIStatusBarStyleLightContentaffiche un contenu léger. À utiliser lorsque du contenu sombre se trouve derrière la barre d'état.

Peut-être aussi d'intérêt:

Dans iOS 7, vous pouvez contrôler le style de la barre d'état à partir d'un contrôleur Vew individuel et le modifier pendant l'exécution de l'application. Pour accepter ce comportement, ajoutez la UIViewControllerBasedStatusBarAppearanceclé au Info.plistfichier d' une application et donnez-lui la valeur YES.

Je recommanderais certainement de parcourir le document, auquel vous pouvez à nouveau accéder avec votre identifiant de développeur Apple.

Aaron Miller
la source
3
J'ai déjà essayé [application setStatusBarStyle: UIStatusBarStyleLightContent]; mais en fait rien ne change, la couleur du texte est toujours noire
Oleksandr Veremchuk
J'aimerais être plus utile, mais comme je l'ai dit, je ne connais pas suffisamment le processus de développement iOS pour savoir quoi suggérer. Désolé!
Aaron Miller
1) définissez UIViewControllerBasedStatusBarAppearance sur YES dans la liste 2) dans viewDidLoad, effectuez une [self setNeedsStatusBarAppearanceUpdate]; 3) ajoutez la méthode suivante :-( UIStatusBarStyle) PreferredStatusBarStyle {return UIStatusBarStyleLightContent; }
Peter B. Kramer
9

Voici les instructions / instructions Apple concernant le changement de la barre d'état. Seuls Dark & ​​light (while & black) sont autorisés dans la barre d'état.

Voici - Comment changer le style de la barre d'état:

Si vous souhaitez définir le style de la barre d'état, le niveau d'application, puis définissez- UIViewControllerBasedStatusBarAppearancele NOdans votre fichier `.plist '.

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

  1. Réglez le UIViewControllerBasedStatusBarAppearancepour YESdans le .plistfichier, si vous avez besoin de style barre d'état du jeu au niveau UIViewController seulement.
  2. Dans la fonction d'ajout de viewDidLoad - setNeedsStatusBarAppearanceUpdate

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

-

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. entrez la description de l'image ici


Voici une astuce pour changer / 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:

entrez la description de l'image ici

Krunal
la source
8

J'ai fait des choses différentes et ça marche pour moi.

Sans aucun changement de code, j'ai configuré mon fichier .plist comme ceci:

  • Afficher l'apparence de la barre d'état basée sur le contrôleur> NON
  • Style de barre d'état> UIStatusBarStyleLightContent (chaîne simple)

J'espère que ça aide.

Éditer

Pour chaque contrôleur de vue, je modifie la propriété Simulated Metrics de la "barre d'état", dans le storyboard, de "déduit" en "Contenu léger"

Felipe Antonio Cardoso
la source
8

Si vous voulez le même résultat avec Swift, vous pouvez utiliser ce code dans votre fichier AppDelegate.swift:

UINavigationBar.appearance().barStyle = .BlackTranslucent

Et le texte de votre barre d'état sera blanc :-)!

fraxool
la source
8

Si vous souhaitez toujours utiliser le View controller-based status bar appearanceparamètre info.plist sur OUI, ce qui signifie que vous pouvez modifier la barre d'état pour chaque contrôleur de vue, utilisez ce qui suit pour le texte blanc dans la barre d'état de ViewDidLoad:

[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
eirik
la source
Barre de navigation! = Barre d'état.
Michael Peterson
... L'avez-vous essayé!? (Et oui, pour la barre d'état)
eirik
7

Dans Plist, ajoutez ceci:

  • Style de barre d'état: UIStatusBarStyleLightContent
  • Afficher l'apparence de la barre d'état basée sur le contrôleur: NO
Ramdhas
la source
7

dans le jeu info.plist la valeur du champ NO Voir l'apparence de la barre d'état en fonction de contrôleur et ensemble statusbar lumière de style dans la cible> réglage général.

parvind
la source
2
gagnant gagnant dîner au poulet
tommybananas
7

Permettez-moi de vous donner une réponse complète à votre question. Changer la couleur du texte de la barre d'état est très facile mais c'est un peu déroutant dans iOS 7 spécialement pour les débutants.

Si vous essayez de changer la couleur du noir au blanc dans Storyboard en sélectionnant le contrôleur de vue et en allant aux mesures simulées sur le côté droit, cela ne fonctionnera pas et je ne sais pas pourquoi. Cela devrait fonctionner en changeant comme ça, mais de toute façon.

Deuxièmement, vous ne trouverez pas la propriété UIViewControllerBasedStatusBarAppearance dans votre plist mais par défaut, elle n'est pas là. Vous devez l'ajouter vous-même en cliquant sur le bouton +, puis définissez-le sur NON.

couleur du texte de la barre d'état ios 7

Enfin, vous devez aller dans votre fichier AppDelegate.m et ajouter ce qui suit dans la méthode didFinishLaunchingWithOptions, ajoutez la ligne suivante:

     [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Cela changera la couleur en blanc pour tous vos contrôleurs de vue. J'espère que cela t'aides!

Amit Shelgaonkar
la source
Cette méthode est déconseillée sur iOS 9
Trung Bui