web-dev-qa-db-fra.com

Modification de la couleur de la barre d'état

J'essaie de changer la couleur de la barre d'état pour aimer un bleu ou une autre couleur.

Est-ce possible ou Apple ne le permet-il pas?

11
Tyler Rutt

REMARQUE: cette solution échoue sous iOS 13 et versions ultérieures.

Premier ensemble de Plist View controller-based status bar appearance à NO

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

    let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
    if statusBar.responds(to:#selector(setter: UIView.backgroundColor)) {
        statusBar.backgroundColor = UIColor.blue
    }
    UIApplication.shared.statusBarStyle = .lightContent

    return true
}

La capture d'écran de sortie est ci-dessous

enter image description here

14
user3182143

Non, ce n'est pas possible avec des API publiques prêtes à l'emploi.

Mais avec la sortie de iOS 7, vous pouvez modifier l'apparence de la barre d'état. Par conséquent, je publie ma solution de contournement.

Depuis un contrôleur de vue individuel en remplaçant le preferredStatusBarStyle:

-(UIStatusBarStyle)preferredStatusBarStyle 
{ 
    return UIStatusBarStyleLightContent; 
}

Vous pouvez également définir le style de la barre d’état à l’aide de UIApplication statusBarStyle méthode. Pour ce faire, insérez une nouvelle clé nommée "Afficher l'apparence de la barre d'état basée sur le contrôleur" et définissez la valeur sur NON. enter image description here

En désactivant "Afficher l'apparence de la barre d'état basée sur le contrôleur", vous pouvez définir le style de la barre d'état à l'aide du code suivant.

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

À la fin, changez la couleur de teinte de la propriété UINavigationBar comme ci-dessous

[[UINavigationBar appearance] setBarTintColor:[UIColor blueColor]];
8
byJeevan


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:

enter image description here

Voici Apple Guidelines/Instruction sur 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, au 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 .plist fichier, si vous devez définir le style de la barre d'état au niveau UIViewController uniquement.
  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. enter image description here

6
Krunal

Voici ma solution: créez un UIView, ajoutez-le à votre vue racine du contrôleur de vue comme arrière-plan artificiel de la barre d'état
1.Créez un UIView

// status bar's height is 20.0pt
CGRect frame = CGRectMake(0.0, 0.0, [UIScreen mainScreen].bounds.size.width, 20.0);
UIView *fakeStatusBarBG = [[UIView alloc] initWithFrame:frame];
fakeStatusBarBG.backgroundColor = [UIColor yourColor];

2.Ajoutez-le à la vue racine de votre contrôleur de vue

// self is your view controller, make sure fakeStatusBarBG is the top subview in your view hierarchy
[self.view insertSubview:fakeStatusBarBG aboveSubview:yourTopSubview];

Voilà.

3. (Supplémentaire) Modifiez la couleur du contenu dans la barre d'état, uniquement blanc ou noir.

- (UIStatusBarStyle)preferredStatusBarStyle
{
    if (youWantWhiteColor)
    {
        return UIStatusBarStyleLightContent;
    }
    return UIStatusBarStyleDefault;
}

Cette solution de contournement n'utilise pas d'API privée, vous êtes donc en sécurité.: -)

4
steveluoxin

J'ai fait cette extension pour changer la couleur de la barre d'état

public extension UIViewController {
    func setStatusBar(color: UIColor) {
        let tag = 12321
        if let taggedView = self.view.viewWithTag(tag){
            taggedView.removeFromSuperview()
        }
        let overView = UIView()
        overView.frame = UIApplication.shared.statusBarFrame
        overView.backgroundColor = color
        overView.tag = tag
        self.view.addSubview(overView)
    }
}

Voici une utilisation n'importe où dans viewcontroller:

setStatusBar(color: .red)

1
Rifat Monzur