web-dev-qa-db-fra.com

Barre d'état affichant du texte noir, uniquement sur le simulateur iPhone 8 iOS 8

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 :)

45
Mohamed Hafez

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.

42
Aaron Wasserman

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;
}
50
Taylor Pierce

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.

16
Tony Adams

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 .

  1. 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.

  2. 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 }

  3. 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

15
Loic Verrall
  1. Ouvrir Info.plist
  2. Ajoutez une nouvelle propriété intitulée "Afficher l'apparence de la barre d'état basée sur le contrôleur" (Boolean) et définissez sa valeur sur "NO".
  3. Ajoutez une nouvelle propriété appelée "Style de la barre d'état" (String) et définissez sa valeur sur "Style noir opaque"

Terminé.

7
José

É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.

6
Kakashi

Ajouter la ligne suivante dans la méthode AppDelegate's didFinishLaunchingWithOptions:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];
6
Teja Kumar Bethina

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
3
Saqib Omer

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
2
Sandy Chapman

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!

1
CMash

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;
}
0
Aamir

Pour Swift 4 et iOS 11

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    application.statusBarStyle = .lightContent
    return true
}
0
eladHayun

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:

  1. Définissez UIViewControllerBasedStatusBarAppearance sur YES dans le fichier .plist, si vous devez définir le style de barre d'état au niveau UIViewController uniquement. 
  2. Dans la fonction d'ajout viewDidLoad - setNeedsStatusBarAppearanceUpdate

  3. é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 .enter image description here

0
Krunal

Dans votre Storyboard, sélectionnez votre contrôleur de vue racine et définissez le type de barre d'état par défaut.

0
Shafraz Buhary