web-dev-qa-db-fra.com

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

Dans XCode 7.3.x, ill a changé la couleur de fond de ma StatusBar avec:

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

Mais il semble que cela ne fonctionne plus avec Swift 3.0.

Ill essayé avec:

func setStatusBarBackgroundColor(color: UIColor) {
guard  let statusBar = (UIApplication.shared.value(forKey: "statusBarWindow") as AnyObject).value(forKey: "statusBar") as? UIView else {
    return
}
statusBar.backgroundColor = color
}

Mais ça me donne:

this class is not key value coding-compliant for the key statusBar.

Des idées pour le changer avec XCode8/Swift 3.0?

35
derdida
extension UIApplication {
    var statusBarView: UIView? {
        if responds(to: Selector("statusBar")) {
            return value(forKey: "statusBar") as? UIView
        }
        return nil
    }
}

UIApplication.shared.statusBarView?.backgroundColor = .red
126
Callam

Couleur de fond de la barre d'état "Changer":

let statusBarView = UIView(frame: UIApplication.shared.statusBarFrame)
let statusBarColor = UIColor(red: 32/255, green: 149/255, blue: 215/255, alpha: 1.0)
statusBarView.backgroundColor = statusBarColor
view.addSubview(statusBarView)

Changer la couleur du texte de la barre d'état:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Mise à jour: veuillez noter que le cadre de la barre d'état changera lorsque la vue sera pivotée. Vous pouvez mettre à jour le cadre de sous-vue créé en:

  • Utilisation du masque de redimensionnement automatique: statusBarView.autoresizingMask = [.flexibleWidth, .flexibleTopMargin] 
  • Observation NSNotification.Name.UIApplicationWillChangeStatusBarOrientation
  • Ou surcharger viewWillLayoutSubviews()
38
Daniel Illescas

Avec Swift 3 et 4 , vous pouvez utiliser l’extrait de code ci-dessous. Il trouve la vue de UIApplication en utilisant valueForKeyPath en définissant sa couleur d'arrière-plan.

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

Objectif c

UIView *statusBarView = [UIApplication.sharedApplication valueForKeyPath:@"statusBarWindow.statusBar"];
if (statusBarView != nil)
{
    statusBarView.backgroundColor = [UIColor redColor];
}
21
abdullahselek

Pour iOS 11 et Xcode 9 , procédez comme suit. 

  1. créer une extension à UIApplication class:

    extension UIApplication { var statusBarView: UIView? { return value(forKey: "statusBar") as? UIView } }

  2. Dans votre classe ou à n'importe quel endroit où vous souhaitez modifier la couleur d'arrière-plan de la barre d'état:

    UIApplication.shared.statusBarView?.backgroundColor = .red

  3. Pour les contenus clairs ou sombres de la barre d'état, allez simplement à Info.plist et ajoutez la ligne de valeur suivante avec la valeurNO.

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

  1. Maintenant, définissez simplement le contenu clair ou tout ce dont vous avez besoin dans l’onglet Général des paramètres de votre projet .
5
Asfand Shabbir

Pour Xcode 9 et iOS 11: Le style de la barre d'état que nous allons essayer d'obtenir est une barre d'état avec un contenu blanc. Accédez au fichier ViewController.Swift et ajoutez les lignes de code suivantes.

override var preferredStatusBarStyle: UIStatusBarStyle {

     return .lightContent

}

Vous pouvez également modifier le style de la barre d'état à l'aide de l'option de configuration du projet:

 enter image description here

Retournez ensuite dans le story-board, sélectionnez le contrôleur de vue et, dans le menu Editeur, sélectionnez Incorporer dans le contrôleur de navigation. Sélectionnez la barre de navigation et, dans l'inspecteur d'attributs, définissez la couleur de teinte de la barre sur rouge. Le Storyboard ressemblera à ceci .  enter image description here

Générez et exécutez le projet. Le contenu de la barre d'état est à nouveau sombre, ce qui est le comportement par défaut. La raison en est que iOS a demandé le style de la barre d'état du contrôleur de navigation au lieu du contrôleur de vue contenu.

 enter image description here

Pour modifier le style de tous les contrôleurs de navigation dans l'application, modifiez la méthode suivante dans le fichier AppDelegate.Swift.

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

    UINavigationBar.appearance().barStyle = .blackOpaque
    return true
    }

Générez et exécutez à nouveau le projet, cette fois le contenu de la barre d'état est devenu blanc.

 enter image description here

4
Jamil Hasnine Tamim

Essaye ça

Allez à votre application info.plist  

  1. Définissez l'apparence de la barre d'état du contrôleur View sur NO. 
  2. Définissez le style de la barre d'état sur UIStatusBarStyleLightContent

Ensuite, allez dans le délégué de votre application et collez le code suivant dans lequel vous définissez le contrôleur 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];
}
3
iOSDev
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any] ?) -> Bool {
    // Override point for customization after application launch.

    UINavigationBar.appearance().barStyle = .blackOpaque
    return true
}

Cela fonctionne pour moi car ma barre de navigation TintColor était noire et ne pouvait pas voir la barre d'état.

Lorsqu'il est défini au-dessus du code, la barre d'état didFinishLaunch apparaît en blanc.

2
ioSana

Vous pouvez définir la couleur d'arrière-plan de la barre d'état lors du lancement de l'application ou de viewDidLoad de votre contrôleur d'affichage.

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

0
Krunal

La solution possible consiste à ajouter une vue qui sera utilisée comme arrière-plan de statusBar sur votre viewController:

let frame = screenController.view.convert(UIApplication.shared.statusBarFrame, to: screenController.view)
let backview = UIView(frame: frame)

backview.backgroundColor = backgroundColor
screenController.view.addSubview(backview)
screenController.view.bringSubviewToFront(backview)
0
Daniil Chuiko