J'essaie de convertir mon application iOS 7 en iOS 8 dans Xcode 6 GM. Lorsque je l'exécute sur des simulateurs pour iPhone 5 ou inférieurs avec iOS 8, tout va bien, mais sur les simulateurs pour iPhone 6 et 6 Plus, la barre d'état a du texte noir au lieu de blanc comme partout à tout moment. J'ai réglé le paramètre UIStatusBarStyle de Info.plist sur "Style noir transparent (alpha de 0,5)" via Xcode, ce qui semble avoir l'effet souhaité partout ailleurs. Une idée sur ce qu'il se passe?
(Je n'ai encore touché à aucun story-board, est-ce que ça pourrait être n'importe quoi avec ça? J'espérais pouvoir différer ça un moment :)
Ce bogue ne survient que si votre application est mise à l'échelle pour s'adapter à la résolution des nouveaux appareils.
Une solution rapide (qui sait si cela sera même résolu en 8.1) consiste à fournir la résolution appropriée lors du chargement des images dans votre package d'application.
De https://developer.Apple.com/ios/human-interface-guidelines/graphics/launch-screen/
For iPhone 7, iPhone 6s, iPhone 6:
750 x 1334 (@2x) for portrait
1334 x 750 (@2x) for landscape
For iPhone 7 Plus, iPhone 6s Plus, iPhone 6 Plus:
1242 x 2208 (@3x) for portrait
2208 x 1242 (@3x) for landscape
Dans mon application, nous ne prenons en charge que le mode portrait. Nous avons donc résolu le problème avec les formats 750x1334 et 1242x2208.
Et juste pour confirmer au cas où cela ne serait pas évident, vous DEVEZ utiliser UIStatusBarStyleLightContent pour votre style de barre de statut.
Alors voici comment je l'ai réparé
Dans PLIST Barre d'état basée sur le contrôleur de vue
Dans AppDelegate DidFinishLunching
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
[self.window setBackgroundColor:[UIColor whiteColor]];
Dans chaque contrôleur de vue
- (UIStatusBarStyle) preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
La barre d'état de mon application fonctionnait correctement sous iOS 7 en utilisant uniquement les paramètres du projet/cible:
Status bar style = UIStatusBarStyleLightContent
et
View controller-based status bar appearance = NO
mais dans iOS 8 (simulateurs iPhone 6 et iPhone 6 Plus), la barre d'état n'apparaissait pas. Modification de l'apparence de la barre d'état du contrôleur View en OUI, puis ajout de:
// Objective C
- (UIStatusBarStyle) preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
//Swift
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
viewController a pour effet de voir à nouveau la barre d’état blanche, mais seulement après le lancement du contrôleur racine initial. Pendant le lancement initial, la barre d'état reste noire.
Une réponse similaire (actuellement votée en tant que 2ème) a déjà été publiée, achetez dans l’intérêt de maintenir ce message à jour, voici la version Swift .
Ajoutez une ligne à votre fichier info.plist appelée Affichez l'apparence de la barre d'état basée sur le contrôleur et définissez sa valeur booléenne surNO.
Dans votre fichier AppDelegate.Swift , ajoutez la méthode suivante:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
UIApplication.sharedApplication().statusBarStyle = .LightContent
return true
}
Je n’avais pas besoin de faire cette étape pour que cela fonctionne (c’est-à-dire effectuer les étapes 1 et 2 et cela pourrait fonctionner). Sinon, essayez d'ajouter la méthode suivante à chacun de vos ViewControllers :
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
J'espère que cela a été utile,
Loic
Terminé.
Étape 1: ouvrez le fichier info.plist de votre application et définissez UIViewControllerBasedStatusBarAppearance sur NO.
Étape 2: Fichier info.plist de votre application et définissez le "style de barre d'état" sur UIStatusBarStyleLightContent.
Ajouter la ligne suivante dans la méthode AppDelegate
's didFinishLaunchingWithOptions:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];
Pourrait être un problème avec le simulateur. Utilisez cette option pour remplacer la barre d'état par défaut ou la barre d'état d'un contrôleur de vue spécifique.
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
} //This is Swift code
Je sais que c’est un mauvais style de remplacer le comportement dans une classe de base en utilisant une catégorie, mais cela fonctionne et peut être la solution la plus rapide pour y remédier.
Étape n ° 1: Assurez-vous que UIViewControllerBasedStatusBarAppearance
ou View controller-based status bar appearance
est défini sur YES
dans votre fichier de liste des applications.
Étape n ° 2: Ajoutez le code suivant à votre projet:
@implementation UIViewController (StatusBarColorFix)
- (UIStatusBarStyle) preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
@end
Une bonne solution consiste à utiliser le nouveau support nib image lancement qui s’utilise sur les modèles d’iPhone 6. Il semble qu’il n’ya qu’un bogue dans iOS 8 qui signifie que les modèles d’iPhone 6 ne vérifient pas correctement le style de la barre d’état lors du lancement, mais qu’ils sont résolus si vous ajoutez la pointe de lancement.
Comme Aaron Wasserman l'a fait remarquer, vous pouvez également spécifier des PNG de lancement pour iPhone 6 et 6+, ce qui semble résoudre également le problème, tant que vous les configurez correctement!
J'ai effectué les étapes suivantes et elles ont très bien fonctionné pour moi. Elles devraient également fonctionner sous iOS 8+.
1) Propriété ajoutée Afficher l’apparence de la barre d’état basée sur le contrôleur =>NOdans Info.plist.
2) Ajoutez le code suivant dans - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
of AppDelegate.m
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
[self.window setBackgroundColor:[UIColor redColor]]; // Change color as per need.
3) Méthode de substitution dans ViewController
- (UIStatusBarStyle) preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
Pour Swift 4 et iOS 11
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
application.statusBarStyle = .lightContent
return true
}
Voici Directives/Instructions Apple à propos de la barre d’état/changement de couleur du texte.
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, définissez UIViewControllerBasedStatusBarAppearance
sur NO
dans votre fichier `.plist '.
Ou par programme, vous pouvez faire depuis App Delegate:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
application.statusBarStyle = .lightContent
return true
}
si vous souhaitez définir le style de la barre d'état, au niveau du contrôleur de vue, procédez comme suit:
UIViewControllerBasedStatusBarAppearance
sur YES
dans le fichier .plist
, si vous devez définir le style de barre d'état au niveau UIViewController uniquement. Dans la fonction d'ajout viewDidLoad - setNeedsStatusBarAppearanceUpdate
écrasez 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 .
Dans votre Storyboard, sélectionnez votre contrôleur de vue racine et définissez le type de barre d'état par défaut.