web-dev-qa-db-fra.com

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

Mon application a un arrière-plan sombre, mais sous 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 puis-je changer la couleur du texte de la barre d'état en blanc comme sur l'écran d'accueil?

965
Oleksandr Veremchuk
  1. Définissez UIViewControllerBasedStatusBarAppearance sur YES dans le fichier .plist.

  2. Dans le viewDidLoad faire un [self setNeedsStatusBarAppearanceUpdate];

  3. Ajoutez la méthode suivante:

    - (UIStatusBarStyle)preferredStatusBarStyle
    { 
        return UIStatusBarStyleLightContent; 
    }
    

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

Swift 3 - Cela fonctionnera avec les contrôleurs dans 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
    }
}

Puis changez les lignes de code suivantes dans le SceneDelegate.Swift

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

à

window.rootViewController = HostingController(rootView: ContentView())
1346
Peter B. Kramer

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

  1. Définissez View controller-based status bar appearance sur NO dans votre Info.plist.
  2. Appeler [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Remarque: Cette méthode est obsolète dans iOS9. Utilisez plutôt preferredStatusBarStyle sur UIViewController. (voir Apple Developer Library )

843
wilsontgh

Vous pouvez le faire sans écrire aucune ligne de code!
Procédez comme suit pour que le texte de la barre d'état soit de couleur blanche dans l'ensemble de l'application.

Sur vous projet fichier:

  • Style de la barre d'état: Transparent black style (alpha of 0.5)
  • Affichage de la barre d'état basée sur le contrôleur: NO
  • La barre d'état est initialement masquée: NO
433
Lucas

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 NO.

Dans AppDelegate, ajoutez

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

à

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

Cette solution fonctionne pour iOS 7/8

240
Pradeep Mahdevu

Pour moi, rien ne s'est passé avec l'utilisation de toutes les choses dans les autres réponses (et à partir 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 du tout.

Enter image description here

110
haraldmartin

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

Dans Info.plist, ajoutez une ligne:

UIViewControllerBasedStatusBarAppearance et définissez la valeur NO.

Ensuite, dans AppDelegate dans didFinishLaunchingWithOptions, ajoutez ces lignes:

[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];
97
stepik21

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: enter image description here

& 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 Infos de déploiement, définissez le style de barre d'état préféré sur .Light comme suit:

enter image description here

C'est ça.

61
Ajinkya Patil

Juste deux étapes comme suit:

étape 1:

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

UIViewControllerBasedStatusBarAppearance, régler la valeur NO.

étape 2:

Dans le projet AppDelegate.m:

- (BOOL)application:(UIApplication *)application 
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    …
    [application setStatusBarStyle:UIStatusBarStyleLightContent];
    …
}
48
folse

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

  1. Définissez the UIViewControllerBasedStatusBarAppearance sur NO dans le Info.plist.

  2. Dans la méthode ViewDidLoad ou n’importe où, vous souhaitez modifier le style de la barre d’état: [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

43
Deniss Fedotovs

Si votre UIViewController est à l'intérieur d'un UINavigationController, vous devrez définir le BarStyle:

-[UINavigationBar setBarStyle:UIBarStyleBlack]

La réponse originale est ici

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

32
Mohit Padalia

Si vous avez un contrôleur de navigation intégré créé via Interface Builder , veillez à 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.

29
matt bernardo

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:

Enter image description here

27
fancoolo

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 NO.

22
neo D1
  1. Allez à Project -> Target,

  2. Puis définissez Status Bar Style sur Light. Cela rend la barre d'état blanche à partir de l'écran de lancement. Project Setting

  3. Puis définissez View controller-based status bar appearance égal à NO dans Info.plist.

20
Wanbok Choi

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

Accédez au info.plist de votre application.

  1. Définissez View controller-based status bar appearance sur NO
  2. Définissez Status bar style sur UIStatusBarStyleLightContent

Ensuite, allez au délégué de votre application et collez le code suivant dans lequel vous définissez le 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,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 Cela fonctionne pour moi.

20
Shahid Iqbal

Simply In Appdelegate

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
20
Vivek Sehrawat

Change in info PLIST En Swift 3 est très facile avec seulement 2 étapes. Allez dans votre info.plist et changez la clé View controller-based status bar appearance en "NON". Ensuite, dans Appdelegate, ajoutez 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éconseillé dans iOS9, vous devez maintenant remplacer cette propriété dans rootviewcontroller

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

override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
 }
18
James Rochabrun

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é de régler le style de la barre d'état pendant l'exécution de l'application. Un bon moyen de modifier dynamiquement le style de la barre d'état consiste à implémenter preferredStatusBarStyle et, dans un bloc d'animation, à mettre à jour l'apparence de la barre d'état et à appeler setNeedsStatusBarAppearanceUpdate.

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

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

Ensuite, vous devez prendre en charge et définir le nouveau style de barre d'état global.

Pour désactiver le contrôle de la barre d'état affichage par affichage, vous devez définir la propriété View controller-based status bar appearance dans Info.plist.

Ouvrez le navigateur de projet et sélectionnez le projet de votre application iOS, puis sélectionnez l'onglet Informations.

Survolez 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 appearance dans le champ Clé, puis assurez-vous que le champ Type est défini sur Boolean. Enfin, entrez NO dans le champ Valeur.

Pour définir un style global pour la barre d'état, ajoutez une autre propriété sous l'onglet Informations avec une clé de Status bar style, un Type de String et une Valeur de Opaque black style.

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

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

17
Josh Earl

Pas besoin de faire un peu plus, il suffit d'écrire ce code dans votre viewController et d'obtenir la couleur de la barre d'état blanche

- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
12
Mohit tomar

Réponse mise à jour pour pour Xcode GM Graine:

  1. Dans Info.plist mettez View controller-based status bar appearance comme NO

  2. Dans le projet, définissez:

    Enter image description here

  3. Dans ViewDidLoad:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

12
parilogic

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

Selon l'endroit où vous avez besoin du style de barre d'état, vous devez toujours garder à 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 dans certains éléments/moments contrôlés par le système, tels que l'écran de démarrage. ) Vous allez dans les paramètres de votre projet Project settings

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

a) Sélectionnez la barre de navigation de votre contrôleur de navigation Select the navigation bar of your navigation controller

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

enter image description here

Ou le faire dans le code comme suit

navigationController?.navigationBar.barStyle = UIBarStyle.Black

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

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

Setting the status bar style in code

11
Fawkes

Appeler simplement

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];

dans le

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

la méthode de mon AppDelegate fonctionne très bien pour iOS7.

10
Cagdas Altinkaya

Voici Directives/Instructions Apple concernant le changement de barre d'état. Seul Dark & ​​Light (while & black) sont autorisés dans la barre d'état.

Voici comment modifier le style de la barre d'état:

Si vous souhaitez définir le style de la barre d'état, le niveau de l'application, définissez UIViewControllerBasedStatusBarAppearance sur NO dans 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. Définissez UIViewControllerBasedStatusBarAppearance sur YES dans le fichier .plist, si vous devez définir le style de la barre d'état au niveau de UIViewController uniquement.
  2. Dans la fonction d'ajout viewDidLoad - setNeedsStatusBarAppearanceUpdate

  3. écrasez 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. enter image description here


Voici quelques astuces pour modifier/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

9
Krunal

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 est visible. [...] Utilisez une constante UIStatusBarStyle pour spécifier si le contenu de la barre d'état doit être sombre ou clair:

UIStatusBarStyleDefault affiche un contenu sombre. [...]

UIStatusBarStyleLightContent affiche le contenu lumineux. Utiliser lorsque le contenu sombre est derrière la barre d'état.

Aussi éventuellement 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 clé UIViewControllerBasedStatusBarAppearance au fichier Info.plist d'une application et donnez-lui la valeur YES.

Je recommanderais certainement de consulter le document auquel vous pouvez accéder avec votre ID de développeur Apple.

9
Aaron Miller

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 :-)!

8
fraxool

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

[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
8
eirik

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

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

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

J'espère que ça aide.

modifier

Pour chaque contrôleur de vue, je modifie la propriété "Méthodes simulées" de la "barre d'état", dans le storyboard, de "inférée" à "Contenu clair".

7

dans info.plist, définissez la valeur de champ NO Afficher l’apparence de la barre d’état basée sur le contrôleur et définissez barre d’état style de la lumière dans la cible> paramètre général.

7
parvind

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 sélectionnant Métriques simulées à droite, cela ne fonctionnera pas et je ne sais pas pourquoi. Cela devrait fonctionner en changeant comme ceci mais n'importe comment.

Deuxièmement, vous ne trouverez pas la propriété UIViewControllerBasedStatusBarAppearance dans votre plist mais, par défaut, il n'y est pas. 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 accéder à 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!

7
Amit Shelgaonkar

Dans Plist, ajoutez ceci:

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

Pour résumer, éditez votre projet Info.plist et ajoutez:

View controller-based status bar appearance: NO

Status bar style: Opaque black style

ou si vous avez un plist clé/valeur brute

UIViewControllerBasedStatusBarAppearance: NO

UIStatusBarStyle: Opaque black style

6
budidino

Pour que cela fonctionne, seul le contrôleur de vue plein écran peut dicter le style de la barre d'état.

Si vous utilisez un contrôleur de navigation et souhaitez contrôler la barre d'état contrôleur par vue, vous souhaiterez sous-classer UINavigationController et implémenter preferredStatusBarStyle de sorte qu'il renvoie la préférence de topViewController.

Assurez-vous de changer la référence de classe dans votre scène de storyboard d'UINavigationController à votre sous-classe (par exemple, MyNavigationController dans l'exemple ci-dessous).

(Ce qui suit fonctionne pour moi. Si votre application est basée sur TabBar, vous voudrez faire quelque chose de similaire en sous-classant UITabBarController mais je ne l'ai pas encore essayé).

@interface MyNavigationController : UINavigationController

@end

@implementation MyNavigationController

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return self.topViewController.preferredStatusBarStyle;
}

@end
6
Juddster

Pour Xcode 5.1:

Ajouter " Afficher l'apparence de la barre d'état basée sur le contrôleur " à NON dans la .plist.

Dans AppDelegate, ajoutez:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

C'est tout!

5
Marcelo dos Santos

Vous pouvez le faire depuis info.plist:

1) "Afficher l'apparence de la barre d'état basée sur le contrôleur" défini sur "NON"

2) "Style de la barre d'état" défini sur "UIStatusBarStyleLightContent"

terminé

4
Dima Deplov

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

Dans AppDelegate, ajoutez

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
4
Patel Jigar

Swift 3 - Xcode 8.

Si vous voulez que la barre d’état soit initialement cachée sur l’écran de lancement, essayez ceci:

Étape 1: Ajouter ce qui suit à info.plist.

  • View controller-based status bar appearance valeur NO
  • Status bar is initially hidden valeur YES

Étape 2: Ecrivez ceci dans la méthode didFinishLaunchingWithOptions.

UIApplication.shared.isStatusBarHidden = false
UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent
3
Zaid Pathan

Si votre application requiert UIStatusBarStyleLightContent par défaut, mais que vous souhaitiez toujours pouvoir utiliser UIStatusBarStyleDefault sur certains écrans, vous pouvez choisir de gérer la couleur de la barre d'état au niveau du contrôleur. Dans tous les cas, vous devrez écraser preferredStatusBarStyle dans chaque contrôleur de vue (ou l'implémenter dans un contrôleur de vue de base, dont tous les autres contrôleurs de vue hériteront). Voici une autre façon de résoudre ce problème:

  • Réglez le UIViewControllerBasedStatusBarAppearance sur NO dans le plist
  • Réglez le UIStatusBarStyle sur UIStatusBarStyleLightContent

Tous les contrôleurs de vue utiliseront du texte blanc pour la barre d'état. Ajoutez maintenant ces méthodes uniquement dans les contrôleurs de vue nécessitant la barre d'état avec du texte noir:

-(void)viewWillAppear:(BOOL)animated  
{  
  [super viewWillAppear:animated];  
  [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}    

-(void)viewWillDisappear:(BOOL)animated  
{  
  [super viewWillAppear:animated];  
  [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}    
3

Le moyen le plus simple de procéder depuis Xcode (sans codage) est:

  • Ajoutez View controller-based status bar appearance à votre Info.plist et définissez la valeur sur NO.
  • Maintenant, allez à la cible de votre projet et dans Deployment Info, vous trouverez une option pour Status Bar Style. Définissez la valeur de cette option sur Light.

Vous aurez la barre d'état White.

3
Mahendra Liya

Je fais cela dans iOS 9 et Swift 2.0 si j'utilise UINavigationController

self.navigationController?.navigationBar.barStyle = UIBarStyle.Black

Et je fais cela si j'utilise modal segue

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return .LightContent
}
3
Alexander Khitev

Dans iOS 8: ajoutez NavigationController.NavigationBar.BarStyle = UIBarStyle.Black; à viewDidLoad

3
S. Matsepura
  • Supprimez le Afficher l’apparence de la barre d’état basée sur le contrôleur dans le fichier .plist (si vous avez créé) et recréez-le.

  • réglez style de barre d'état sur style noir opaque

Dans appDelegate, ajoutez le code suivant sous didFinishLaunching.

 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
2
VarshaSai

Cela semble être un problème avec la version actuelle de Xcode et iOS 7.

Certains contenus associés sur les forums de développement Apple se trouvent dans une recherche de UIStatusBarStyleLightContent dans "iOS 7 Beta Livability" sur le Apple Forums de développeur *. (actuellement 32 articles).

Je suis tombé dessus en essayant de le régler sur la version allégée.

(Ceci est juste un suivi de la réponse d'Aaron.)

2
AlastairDewar

Cela a fonctionné pour moi:

  1. Réglez le UIViewControllerBasedStatusBarAppearance sur YES dans le plist

  2. La rootViewController a besoin de l’implémentation de la méthode pour

    -(UIStatusBarStyle)preferredStatusBarStyle
    

Parce que mon rootViewController est géré par Cocoapods (JASidePanelController), j'ai ajouté cette méthode via une catégorie:

#import "JASidePanelController+StatusBarStyle.h"

@implementation JASidePanelController (StatusBarStyle)

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

@end
2
Paul

Il suffit de changer 1)Info.plist Affichez la barre d'état basée sur le contrôleur appearance -> NO et écrivez 2)

  [[UIApplication
 sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent]; 

dans

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
2
IOS developer

changer la couleur du texte de la barre d'état pour tous les ViewControllers

Swift

si l'apparence de la barre d'état basée sur le contrôleur View = YES dans Info.plist

puis utilisez cette extension pour tous les NavigationController

extension UINavigationController
{
    override open var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
     }
 }

s'il n'y a pas d'UINavigationController et que vous ne disposez que d'UIViewController, utilisez le code ci-dessous:

extension UIViewController
{
    override open var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
     }
 }

Objectif C

créer une catégorie de classe

Pour UIViewController

Dans UIViewController + StatusBarStyle.h

 @interface UIViewController (StatusBarStyle)
 @end

Dans UIViewController + StatusBarStyle.m

 #import "UIViewController+StatusBarStyle.h"

 @implementation UIViewController (StatusBarStyle)
 -(UIStatusBarStyle)preferredStatusBarStyle
 {
  return UIStatusBarStyleLightContent;
 }
 @end 

Pour UINavigationController

Dans UINavigationController + StatusBarStyle.h

 @interface UINavigationController (StatusBarStyle)
 @end

Dans UINavigationController + StatusBarStyle.m

 #import "UINavigationController+StatusBarStyle.h"

 @implementation UINavigationController (StatusBarStyle)
 -(UIStatusBarStyle)preferredStatusBarStyle
 {
  return UIStatusBarStyleLightContent;
 }
 @end  
2
Datt Patel

Vous pouvez utiliser ceci pour iOS 6 et 7:

#ifdef __IPHONE_7_0
# define STATUS_STYLE UIStatusBarStyleLightContent
#else
# define STATUS_STYLE UIStatusBarStyleBlackTranslucent
#endif

[[UIApplication sharedApplication] setStatusBarStyle:STATUS_STYLE animated:YES];
1
Arash Zeinoddini

Sur iOS 7, si vous souhaitez utiliser UIViewControllerBasedStatusBarAppearance == YES et que votre contrôleur de vue racine est UINavigationController, vous devez le sous-classer et surcharger childViewControllerForStatusBarStyle, par exemple, comme ceci:

- (UIViewController*) childViewControllerForStatusBarStyle
{
    return self.viewControllers.lastObject;
}

Après cela, preferredStatusBarStyle sera appelé sur les contrôleurs de vue avancés.

1
poGUIst

S'il vous plaît essayer ceci

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    [application setStatusBarHidden:NO];
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
    if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
        statusBar.backgroundColor = [UIColor blackColor];
    }
1
Karthickkck

Ce que je devais faire pour Swift et le contrôleur de navigation

extension UINavigationController {
    override open var preferredStatusBarStyle: UIStatusBarStyle {
       return .lightContent
    }   
}
0
Cmar

Si vous souhaitez définir une couleur, utilisez le code ci-dessous.

id statusBarWindow = [[UIApplication sharedApplication] valueForKey:@"statusBarWindow"];
id statusBar = [statusBarWindow valueForKey:@"statusBar"];

SEL setForegroundColor_sel = NSSelectorFromString(@"setForegroundColor:");
if([statusBar respondsToSelector:setForegroundColor_sel]) {
    // iOS 7+
    [statusBar performSelector:setForegroundColor_sel withObject:YourColorHere];
                                                                 ^^^^^^^^^^^^^
}

Je sais que j'accède à une API privée, mais je l'ai utilisé dans de nombreux projets et Apple l'a approuvé.

Juste lors de la soumission de l'application, envoyez ce code à Apple dans la section Commentaires et indiquez que vous utilisez ce code pour modifier la couleur de la barre d'état.

Et oui , n'oubliez pas ci-dessous aussi.

0
Fahim Parkar