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?
extension UIApplication {
var statusBarView: UIView? {
if responds(to: Selector("statusBar")) {
return value(forKey: "statusBar") as? UIView
}
return nil
}
}
UIApplication.shared.statusBarView?.backgroundColor = .red
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:
statusBarView.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]
NSNotification.Name.UIApplicationWillChangeStatusBarOrientation
viewWillLayoutSubviews()
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];
}
Pour iOS 11 et Xcode 9 , procédez comme suit.
créer une extension à UIApplication class:
extension UIApplication {
var statusBarView: UIView? {
return value(forKey: "statusBar") as? UIView
}
}
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
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
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:
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 .
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.
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.
Essaye ça
Allez à votre application info.plist
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];
}
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.
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:
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)