Comment changer la couleur d'arrière-plan de la barre d'état et la couleur du texte sur iOS 7?

88

Mon application actuelle fonctionne sur iOS 5 et 6.

La barre de navigation a une couleur orange et la barre d'état a une couleur d'arrière-plan noire avec une couleur de texte blanche. Cependant, lorsque j'exécute la même application sur iOS 7, j'observe que la barre d'état est transparente avec la même couleur d'arrière-plan orange que la barre de navigation et que la couleur du texte de la barre d'état est noire.

Pour cette raison, je ne suis pas en mesure de faire la différence entre la barre d'état et la barre de navigation.

Comment faire pour que la barre d'état ait la même apparence que dans iOS 5 et 6, c'est-à-dire avec une couleur d'arrière-plan noire et une couleur de texte blanche? Comment puis-je faire cela par programme?

Rejeesh Rajan
la source

Réponses:

174

Attention: cela ne fonctionne plus avec iOS 13 et Xcode 11.

=================================================== =======================

J'ai dû essayer de chercher d'autres moyens. Ce qui n'implique pas addSubviewsur la fenêtre. Parce que je monte la fenêtre lorsque le clavier est présenté.

Objectif c

- (void)setStatusBarBackgroundColor:(UIColor *)color {

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

    if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
        statusBar.backgroundColor = color;
    }
}

Rapide

func setStatusBarBackgroundColor(color: UIColor) {

    guard  let statusBar = UIApplication.sharedApplication().valueForKey("statusBarWindow")?.valueForKey("statusBar") as? UIView else {
        return
    }

    statusBar.backgroundColor = color
}

Swift 3

func setStatusBarBackgroundColor(color: UIColor) {

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

    statusBar.backgroundColor = color
}

L'appel de ce formulaire a application:didFinishLaunchingWithOptionsfonctionné pour moi.

NB Nous avons une application dans l'App Store avec cette logique. Donc, je suppose que cela convient à la politique de l'App Store.


Éditer:

À utiliser à vos risques et périls. Former le commentateur @Sebyddd

J'ai eu une application rejetée à cause de cela, tandis qu'une autre a été acceptée très bien. Ils considèrent qu'il s'agit d'une utilisation d'API privée, vous avez donc de la chance pendant le processus de révision :) - Sebyddd

Warif Akhand Rishi
la source
5
Contrairement à la solution acceptée, cela fonctionne également lorsque vous changez d'orientation. Merci!
Michael
5
N'est-ce pas là une utilisation d'API privée?
Foriger
2
J'ai eu une application rejetée en raison de cela, tandis qu'une autre a été acceptée très bien. Ils considèrent qu'il s'agit d'une utilisation privée de l'API, vous avez donc de la chance pendant le processus de révision :)
Sebyddd
3
Il y a un problème avec cette solution, lorsque vous appuyez deux fois sur le bouton d'accueil, cette couleur de barre d'état disparaît.
Timeless
3
Ne fonctionne pas sous iOS 13. Application appelée -statusBar ou -statusBarWindow sur UIApplication: ce code doit être modifié car il n'y a plus de barre d'état ou de fenêtre de barre d'état. Utilisez plutôt l'objet statusBarManager sur la scène de la fenêtre.
NSDeveloper
109

Accédez à votre application info.plist

1) Définissez View controller-based status bar appearancesur NO
2) Définissez Status bar stylesur UIStatusBarStyleLightContent

Puis Accédez à votre délégué d'application et collez le code suivant à l'endroit où vous définissez le 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];
}

J'espère que cela aide.

Shahid Iqbal
la source
En mentionnant simplement, les documents Apple recommandent ceci si cochez plutôt: if (NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_6_1) {} else {} bravo!
Joel Balmer le
2
@learner Accédez à info.plist, puis sélectionnez n'importe quelle ligne. Vous verrez un signe +. Cliquez sur le signe Plus et dans le menu déroulant, vous devriez voir Status bar styleOption. Sélectionnez-le. Et collez UIStatusBarStyleLightContentcomme sa valeur.
Shahid Iqbal
5
Cela ne tient pas compte de la rotation
lostintranslation
4
Il est préférable d'utiliser la largeur de l'écran UIS:UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 20)];
KlimczakM
2
Une façon plus succincte de définir le cadre utiliseUIApplication.sharedApplication().statusBarFrame
Doug
28

Lors de la gestion de la couleur d'arrière-plan de la barre d'état dans iOS 7, il y a 2 cas

Cas 1: Vue avec barre de navigation

Dans ce cas, utilisez le code suivant dans votre méthode viewDidLoad

 UIApplication *app = [UIApplication sharedApplication];
 CGFloat statusBarHeight = app.statusBarFrame.size.height;

 UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, -statusBarHeight, [UIScreen mainScreen].bounds.size.width, statusBarHeight)];
 statusBarView.backgroundColor = [UIColor yellowColor];
 [self.navigationController.navigationBar addSubview:statusBarView];

Cas 2: Vue sans barre de navigation

Dans ce cas, utilisez le code suivant dans votre méthode viewDidLoad

 UIApplication *app = [UIApplication sharedApplication];
 CGFloat statusBarHeight = app.statusBarFrame.size.height;

 UIView *statusBarView =  [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, statusBarHeight)];
 statusBarView.backgroundColor  =  [UIColor yellowColor];
 [self.view addSubview:statusBarView];

Lien source http://code-ios.blogspot.in/2014/08/how-to-change-background-color-of.html

Teja Kumar Bethina
la source
Cela a bien fonctionné pour moi, mais la barre d'état devrait être haute de 20 points: [[UIView alloc] initWithFrame: CGRectMake (0, -20, 320, 20)];
LordParsley
27

1) définissez UIViewControllerBasedStatusBarAppearance sur YES dans le plist

2) dans viewDidLoad, faites un [self setNeedsStatusBarAppearanceUpdate];

3) ajoutez la méthode suivante:

 -(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
 } 

MISE À JOUR:
consultez également le guide-développeurs-de-la-barre-d'état-ios-7

Muruganandham K
la source
vous pouvez le changer en noir ou blanc
Muruganandham K
1
Cela n'a aucun effet (ios7, simulateur). Le "favoriteStatusBarStyle" n'est jamais appelé.
Adam
1
utilisez-vous xib ?. si OUI modifier la valeur de la barre d'état dans la propriété des métriques simulées
Muruganandham K
3
Ah, j'ai trouvé le problème. UINavigationController d'Apple saisit la notification - c'est-à-dire que votre réponse est uniquement lorsque le contrôleur de vue est le contrôleur supérieur, il n'y a pas de conteneurs (pas de barre d'onglets, pas de barre de navigation, etc.).
Adam
3
Cas particulier lors de l'utilisation de Storyboard + NavigationController. Faites le n ° 1 ci-dessus. Ensuite, créez une sous-classe pour UINavigationController (appelez-le myNavController). Dans Storyboard, définissez la classe de NavigationController sur "myNavController". Dans myNavController.m, faites les # 2 et 3 ci-dessus. La méthode du n ° 3 sera désormais appelée dans votre sous-classe (définissez un journal ou un point d'arrêt à observer).
ObjectiveTC
16

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:

entrez la description de l'image ici


Voici les directives / 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 de l'application, puis définissez UIViewControllerBasedStatusBarAppearance à 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 UIViewControllerBasedStatusBarAppearancesurYES dans le .plistfichier, si vous devez définir le style de la barre d'état au niveau de UIViewController uniquement.
  2. Dans la fonction d'ajout de viewDidLoad - setNeedsStatusBarAppearanceUpdate

  3. override favoriteStatusBarStyle dans votre contrôleur de vue.

-

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
Krunal
la source
L'application sera-t-elle rejetée si nous les utilisons? Changer la couleur statusBarView comme ça est autorisé?
abhimuralidharan
@ abhi1992 Je ne peux pas dire si Apple l'acceptera ou non car j'ai implémenté cette solution dans mon application d'entreprise, qui n'a pas besoin d'être soumise sur l'App Store. :)
Krunal
Si je mets cela dans un viewdidload d'un viewcontroller dans une application basée sur des onglets, il définit la couleur de chaque viewController, non seulement celui où j'ai mis le code (est-ce normal?)
14

Dans iOS 7, la barre d'état n'a pas d'arrière-plan, par conséquent, si vous placez une vue noire de 20 pixels de haut derrière elle, vous obtiendrez le même résultat que iOS 6.

Vous pouvez également lire le Guide de transition de l'interface utilisateur iOS 7 pour plus d'informations sur le sujet.

Gabriele Petronella
la source
2
Gabriele, pouvez-vous s'il vous plaît fournir du code pour mettre une vue de 20 pixels derrière elle?
Dejell
Dejel, c'est sur la réponse de Shahid.
Fattie
N'utilisez pas seulement "20"! Vous pouvez obtenir la valeur correctement, voir ma longue réponse ci-dessous.
Fattie
8

Écrivez ceci dans votre méthode ViewDidLoad:

if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) {
    self.edgesForExtendedLayout=UIRectEdgeNone;
    self.extendedLayoutIncludesOpaqueBars=NO;
    self.automaticallyAdjustsScrollViewInsets=NO;
}

Cela a corrigé la couleur de la barre d'état pour moi et d'autres mauvais emplacements de l'interface utilisateur dans une certaine mesure.

Sanjana
la source
7

Voici une solution totale, copier-coller, avec un

explication absolument correcte

de chaque problème impliqué.

Merci à Warif Akhand Rishi !

pour la découverte incroyable concernant keyPath statusBarWindow.statusBar. Bon.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
    // handle the iOS bar!
    
    // >>>>>NOTE<<<<<
    // >>>>>NOTE<<<<<
    // >>>>>NOTE<<<<<
    // "Status Bar Style" refers to the >>>>>color of the TEXT<<<<<< of the Apple status bar,
    // it does NOT refer to the background color of the bar. This causes a lot of confusion.
    // >>>>>NOTE<<<<<
    // >>>>>NOTE<<<<<
    // >>>>>NOTE<<<<<
    
    // our app is white, so we want the Apple bar to be white (with, obviously, black writing)
    
    // make the ultimate window of OUR app actually start only BELOW Apple's bar....
    // so, in storyboard, never think about the issue. design to the full height in storyboard.
    let h = UIApplication.shared.statusBarFrame.size.height
    let f = self.window?.frame
    self.window?.frame = CGRect(x: 0, y: h, width: f!.size.width, height: f!.size.height - h)
    
    // next, in your plist be sure to have this: you almost always want this anyway:
    // <key>UIViewControllerBasedStatusBarAppearance</key>
    // <false/>
    
    // next - very simply in the app Target, select "Status Bar Style" to Default.
    // Do nothing in the plist regarding "Status Bar Style" - in modern Xcode, setting
    // the "Status Bar Style" toggle simply sets the plist for you.
    
    // finally, method A:
    // set the bg of the Apple bar to white.  Technique courtesy Warif Akhand Rishi.
    // note: self.window?.clipsToBounds = true-or-false, makes no difference in method A.
    if let sb = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView {
        sb.backgroundColor = UIColor.white
        // if you prefer a light gray under there...
        //sb.backgroundColor = UIColor(hue: 0, saturation: 0, brightness: 0.9, alpha: 1)
    }
    
    /*
    // if you prefer or if necessary, method B:
    // explicitly actually add a background, in our app, to sit behind the apple bar....
    self.window?.clipsToBounds = false // MUST be false if you use this approach
    let whiteness = UIView()
    whiteness.frame = CGRect(x: 0, y: -h, width: f!.size.width, height: h)
    whiteness.backgroundColor = UIColor.green
    self.window!.addSubview(whiteness)
    */
    
    return true
}
Fattie
la source
6

Juste pour ajouter à la réponse de Shahid - vous pouvez tenir compte des changements d'orientation ou de différents appareils utilisant ceci (iOS7 +):

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

  //Create the background
  UIView* statusBg = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.window.frame.size.width, 20)];
  statusBg.backgroundColor = [UIColor colorWithWhite:1 alpha:.7];

  //Add the view behind the status bar
  [self.window.rootViewController.view addSubview:statusBg];

  //set the constraints to auto-resize
  statusBg.translatesAutoresizingMaskIntoConstraints = NO;
  [statusBg.superview addConstraint:[NSLayoutConstraint constraintWithItem:statusBg attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:statusBg.superview attribute:NSLayoutAttributeTop multiplier:1.0 constant:0.0]];
  [statusBg.superview addConstraint:[NSLayoutConstraint constraintWithItem:statusBg attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:statusBg.superview attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]];
  [statusBg.superview addConstraint:[NSLayoutConstraint constraintWithItem:statusBg attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:statusBg.superview attribute:NSLayoutAttributeRight multiplier:1.0 constant:0.0]];
  [statusBg.superview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[statusBg(==20)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(statusBg)]];
  [statusBg.superview setNeedsUpdateConstraints];
  ...
}
bendytree
la source
Oui, c'est encore mieux pour gérer les tailles et les orientations de l'écran. Ajoutez également quelque chose comme ceci autour de ce code: if (NSFoundationVersionNumber> NSFoundationVersionNumber_iOS_6_1)
Benjamin Piette
6

pour l'arrière-plan, vous pouvez facilement ajouter une vue, comme dans l'exemple:

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:0.1];
[navbar addSubview:view];

où "navbar" est un UINavigationBar.

user3107409
la source
4
Vos deux premières lignes sont correctes. Mais la dernière ligne doit être [navigationController.view addSubview: view]; Il doit être ajouté dans la vue UINavigationController et non dans la vue UINavigationBar car il ajoutera une vue après 20 px de barre d'état ne chevauchant pas la barre d'état.
Shahid Iqbal
Dans Swift, utilisez ceci: let rect = CGRect (x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIApplication.shared.statusBarFrame.height) let bar = UIView (frame: rect) bar.backgroundColor = UIColor.white navigationController? .View.addSubview (bar)
JVS
5

Swift 4:

// Changer la couleur d'arrière-plan de la barre d'état

let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView

statusBar?.backgroundColor = UIColor.red
V.Kumar
la source
4

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

let proxyViewForStatusBar : UIView = UIView(frame: CGRectMake(0, 0,self.view.frame.size.width, 20))    
        proxyViewForStatusBar.backgroundColor=UIColor.whiteColor()
        self.view.addSubview(proxyViewForStatusBar)
Yogesh Lolusare
la source
1

Dans le cas de Swift 2.0 sur iOS 9

Placez ce qui suit dans le délégué d'application, sous didFinishLaunchingWithOptions:

    let view: UIView = UIView.init(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.size.width, 20))

    view.backgroundColor = UIColor.blackColor()  //The colour you want to set

    view.alpha = 0.1   //This and the line above is set like this just if you want 
                          the status bar a darker shade of 
                          the colour you already have behind it.

    self.window!.rootViewController!.view.addSubview(view)
Keegan Cruickshank
la source
Cela fonctionne, mais je ne pense pas que ce soit vraiment la meilleure façon de gérer ce style
Michael
1

La solution iTroid23 a fonctionné pour moi. J'ai raté la solution Swift. Alors peut-être que cela est utile:

1) Dans mon plist, j'ai dû ajouter ceci:

<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>

2) Je n'ai pas besoin d'appeler "setNeedsStatusBarAppearanceUpdate".

3) Dans Swift, j'ai dû ajouter ceci à mon UIViewController:

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.LightContent
}
Poignard
la source
Merci pour la clé "UIViewControllerBasedStatusBarAppearance", m'a aidé :)
LightNight
1

Si vous utilisez a UINavigationController, vous pouvez utiliser une extension comme celle-ci:

extension UINavigationController {
    private struct AssociatedKeys {
        static var navigationBarBackgroundViewName = "NavigationBarBackground"
    }

    var navigationBarBackgroundView: UIView? {
        get {
            return objc_getAssociatedObject(self,
                                        &AssociatedKeys.navigationBarBackgroundViewName) as? UIView
        }
        set(newValue) {
             objc_setAssociatedObject(self,
                                 &AssociatedKeys.navigationBarBackgroundViewName,
                                 newValue,
                                 .OBJC_ASSOCIATION_RETAIN)
        }
    }

    func setNavigationBar(hidden isHidden: Bool, animated: Bool = false) {
       if animated {
           UIView.animate(withDuration: 0.3) {
               self.navigationBarBackgroundView?.isHidden = isHidden
           }
       } else {
           navigationBarBackgroundView?.isHidden = isHidden
       }
    }

    func setNavigationBarBackground(color: UIColor, includingStatusBar: Bool = true, animated: Bool = false) {
        navigationBarBackgroundView?.backgroundColor = UIColor.clear
        navigationBar.backgroundColor = UIColor.clear
        navigationBar.barTintColor = UIColor.clear

        let setupOperation = {
            if includingStatusBar {
                self.navigationBarBackgroundView?.isHidden = false
                if self.navigationBarBackgroundView == nil {
                    self.setupBackgroundView()
                }
                self.navigationBarBackgroundView?.backgroundColor = color
            } else {
                self.navigationBarBackgroundView?.isHidden = true
                self.navigationBar.backgroundColor = color
            }
        }

        if animated {
            UIView.animate(withDuration: 0.3) {
                setupOperation()
            }
        } else {
            setupOperation()
        }
    }

    private func setupBackgroundView() {
        var frame = navigationBar.frame
        frame.origin.y = 0
        frame.size.height = 64

        navigationBarBackgroundView = UIView(frame: frame)
        navigationBarBackgroundView?.translatesAutoresizingMaskIntoConstraints = true
        navigationBarBackgroundView?.autoresizingMask = [.flexibleWidth, .flexibleBottomMargin]

        navigationBarBackgroundView?.isUserInteractionEnabled = false

        view.insertSubview(navigationBarBackgroundView!, aboveSubview: navigationBar)
    }
}

Il rend essentiellement l'arrière-plan de la barre de navigation transparent et utilise un autre UIView comme arrière-plan. Vous pouvez appeler la setNavigationBarBackgroundméthode de votre contrôleur de navigation pour définir la couleur d'arrière-plan de la barre de navigation avec la barre d'état.

Gardez à l'esprit que vous devez ensuite utiliser la setNavigationBar(hidden: Bool, animated: Bool)méthode dans l'extension lorsque vous souhaitez masquer la barre de navigation, sinon la vue qui a été utilisée comme arrière-plan sera toujours visible.

halil_g
la source
Pour moi, c'était la meilleure réponse car elle atténuait de nombreux autres problèmes de réponse. L'inconvénient est le frame.size.height = 64 fixe qui est faux. Une façon plus récente d'obtenir la hauteur serait -> .view.window? .WindowScene? .StatusBarManager? .StatusBarFrame.height ?? 0.
Gonçalo Gaspar le
1

Essaye ça. Utilisez ce code dans votre didFinishLaunchingWithOptionsfonction de classe appdelegate :

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

L'extrait de code ci-dessous doit fonctionner avec Objective C.

   if (@available(iOS 13.0, *)) {
      UIView *statusBar = [[UIView alloc]initWithFrame:[UIApplication sharedApplication].keyWindow.windowScene.statusBarManager.statusBarFrame] ;
      statusBar.backgroundColor = [UIColor whiteColor];
      [[UIApplication sharedApplication].keyWindow addSubview:statusBar];
  } else {
      // Fallback on earlier versions

       UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
          if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
              statusBar.backgroundColor = [UIColor whiteColor];//set whatever color you like
      }
  }
Govind
la source
Vous obtiendrez une double barre d'état sur iOS 13.
kelin
0

Pour la couleur de la barre: vous fournissez une image d'arrière-plan personnalisée pour la barre.

Pour la couleur du texte: utilisez les informations dans À propos de la gestion du texte dans iOS

Chris Alan
la source
1
il ne s'agit pas de définir une couleur de texte
Johnykutty
Ajouter une image d'arrière-plan est exagéré si vous voulez juste définir une couleur unie, et impossible, surtout si vous voulez pouvoir changer la couleur à la volée
halil_g
0

J'ai réussi à personnaliser la couleur de StatusBar assez simplement en ajoutant un AppDelegate.csfichier dans la méthode:

public override bool FinishedLaunching(UIApplication app, NSDictionary options)

code suivant:

UIView statusBar = UIApplication.SharedApplication.ValueForKey(new NSString("statusBar")) as UIView;

if (statusBar!=null && statusBar.RespondsToSelector(new Selector("setBackgroundColor:")))
{
   statusBar.BackgroundColor = Color.FromHex(RedColorHex).ToUIColor();
}

Donc, vous obtenez quelque chose comme ça:

entrez la description de l'image ici

Lien: https://jorgearamirez.wordpress.com/2016/07/18/lesson-x-effects-for-the-status-bar/

Dan
la source
Quelle langue est-ce?
Ahmadreza
1
@Alfi Xamarin forme et en arrière-plan son C #
Dan
0

Swift 4

En Info.plistajouter cette propriété

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

et après cela à l' AppDelegateintérieur de l' didFinishLaunchingWithOptionsajout de ces lignes de code

UIApplication.shared.isStatusBarHidden = false
UIApplication.shared.statusBarStyle = .lightContent
Smg baquer
la source
0

Dans Swift 5 et Xcode 10.2

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(0.1 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: {

//Set status bar background colour
let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView
statusBar?.backgroundColor = UIColor.red
//Set navigation bar subView background colour
   for view in controller.navigationController?.navigationBar.subviews ?? [] {
      view.tintColor = UIColor.white
      view.backgroundColor = UIColor.red
   }
})

Ici, j'ai corrigé la couleur d'arrière-plan de la barre d'état et la couleur d'arrière-plan de la barre de navigation. Si vous ne voulez pas de couleur de la barre de navigation, commentez-la.

iOS
la source
0

Code rapide

            let statusBarView = UIView(frame: CGRect(x: 0, y: 0, width: view.width, height: 20.0))
            statusBarView.backgroundColor = UIColor.red
            self.navigationController?.view.addSubview(statusBarView)
Samkit Jain
la source
0

Vous pouvez utiliser comme ci-dessous, pour iOS 13 * et Swift 4.

1 -> Définissez l'apparence de la barre d'état basée sur le contrôleur de vue sur NON

extension UIApplication {
var statusBarView: UIView? {
    if #available(iOS 13.0, *) {
       let statusBar =  UIView()

        statusBar.frame = UIApplication.shared.statusBarFrame

        UIApplication.shared.keyWindow?.addSubview(statusBar)
      
        return statusBar
    } else {
        let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView
        return statusBar
    }
}

utiliser dans didFinishLaunchingWithOptions

UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
Lokesh
la source