web-dev-qa-db-fra.com

Modifier la couleur d'arrière-plan de la barre d'état après iOS 7

Je souhaite modifier la couleur d'arrière-plan de la barre d'état sous iOS 7 et j'utilise ce code:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [UIApplication sharedApplication].statusBarHidden = NO;

        self.window.clipsToBounds = YES;
        [[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleLightContent];
        self.window.frame =  CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20);
        self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);

        ...
        ...


}

Lorsque j'écris ceci, il affiche la barre d'état avec un fond noir. Je veux qu'il ait un fond rouge.

Comment peut-on changer la couleur de la barre d'état pour avoir un arrière-plan rouge au lieu de noir?

15
Krunal

Dans iOS 7 et versions ultérieures, la barre d'état est transparent. Définissez la backgroundColor de votre vue sur la couleur souhaitée pour la barre d'état.

Vous pouvez également ajouter une sous-vue de 20 pixels de haut avec une couleur rouge en haut de votre vue.

Consultez le Guide de transition Apple pour plus d’informations.

Assurez-vous également que votre preferredStatusBarStyle est UIStatusBarStyleLightContent. et dans votre Info.plist, définissez "Afficher l'apparence de la barre d'état basée sur le contrôleur" sur "NON".

15
iProgrammer

Lors du traitement de la couleur d’arrière-plan de la barre d’état dans iOS 7, il existe deux 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: Voir 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];
27
Teja Kumar Bethina

Objectif c

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

    [[UIApplication sharedApplication] setStatusBarHidden:false];
    UIView *statusBar=[[UIApplication sharedApplication] valueForKey:@"statusBar"];
    statusBar.backgroundColor = [UIColor redColor];

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];



    return YES;
}

Cela fonctionne pour moi. J'espère que cela vous aidera aussi.

8
Subramanyam Subbu

pour ce que @ Teja Kumar Bethina a fourni est utile, mais il est préférable d’obtenir la hauteur de la barre de statut de UIApplication singleton comme ci-dessous:

UIApplication *app = [UIApplication sharedApplication];

UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, -app.statusBarFrame.size.height, self.view.bounds.size.width, app.statusBarFrame.size.height)];
    statusBarView.backgroundColor = [UIColor blackColor];
5
Alan Feng

en utilisation AppDelegate 

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

et dans le fichier info.plist du projet

définir l'indicateur NO sur Afficher l'apparence de la barre d'état basée sur le contrôleur dans l'application.

3
Madhu

Appelez cette fonction depuis ViewDidLoad en passant avec la couleur de votre barre d’état. 

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

J'espère que ça va aider.

3
Deepak Carpenter

Voici une solution Swift qui utilise la mise en page automatique. Si votre application est en portrait ou en paysage, la barre aura la largeur correcte. Elle est ajoutée à la vue de la barre de navigation en tant que sous-vue et est donc décalée de -20. Vous pouvez l'ajouter à la vue parente de votre barre de navigation, puis le décalage n'est pas requis. Cet exemple définira également la couleur de la même manière que la barre de navigation. 

J'espère que cela pourra aider :) 

    // Add colored opaque view behind the status bar view
    let statusBarView = UIView()
    statusBarView.backgroundColor = navigationBar.backgroundColor
    statusBarView.translatesAutoresizingMaskIntoConstraints = false
    navigationBar.addSubview(statusBarView)

    let views = ["statusBarView": statusBarView]
    let hConstraint = "H:|-0-[statusBarView]-0-|"
    let vConstraint = "V:|-(-20)-[statusBarView(20)]"

    var allConstraints = NSLayoutConstraint.constraintsWithVisualFormat(hConstraint,
            options: [], metrics: nil, views: views)

    allConstraints += NSLayoutConstraint.constraintsWithVisualFormat(vConstraint,
            options: [], metrics: nil, views: views)

    NSLayoutConstraint.activateConstraints(allConstraints)
1
maninvan