Même question que this , mais cette question a été évitée (à cause de NDA à l'époque) et n'est plus active.
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** Illegal property type, c for appearance setter, _installAppearanceSwizzlesForSetter:'
Je le place dans viewDidLoad
de mon contrôleur de vue initial. setTranslucent
apparaît sur la saisie semi-automatique et ne se plaint pas avant de planter et de parler de swizzles et d'autres choses.
Toute information à ce sujet serait formidable, j'ai toujours du mal à obtenir une apparence de barre d'état cohérente dans mon application.
Il semble que la propriété translucent
ne puisse tout simplement pas être définie à l'aide de UIAppearance
. Je ne sais pas exactement pourquoi, mais je suppose que certaines propriétés ne sont tout simplement pas prises en charge. Cependant, j'ai résolu ce problème en créant un UIViewController
personnalisé et en faisant de tous les autres viewControllers de mon application une sous-classe de ce viewController personnalisé. De cette façon, je peux définir des propriétés globales (telles que translucent
dans votre cas) qui seront héritées par tous les autres viewControllers de mon application. Je sais que c'est une sorte de grand changement, mais j'espère que cela aide.
**** MODIFIER ****
Depuis iOS 8, la translucidité peut être définie avec UIAppearance:
Objectif c
if([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
[[UINavigationBar appearance] setTranslucent:YES];
}
Swift
if (UIDevice.currentDevice().systemVersion as NSString).floatValue >= 8.0 {
UINavigationBar.appearance().translucent = true
}
Vous pouvez le tromper cependant en spécifiant une image qui n'existe pas, ce qui rendra la barre d'outils opaque
[[UIToolbar appearance] setBackgroundColor:[UIColor colorWithRed:219.0/255.0 green:67.0/255.0 blue:67.0/255.0 alpha:1.0]];
[[UIToolbar appearance] setBackgroundImage:[[UIImage alloc] init] forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
vous plantez parce que vous utilisez la méthode illégale. dans UIAppearance
, il dit
To participate in the appearance proxy API, tag your appearance property selectors in your header with UI_APPEARANCE_SELECTOR.
cela signifie que lorsque vous utilisez [[XXX appearance] method]
, la méthode method doit avoir l'attribut UI_APPEARANCE_SELECTOR, sinon elle peut lever une exception et translucent
ne l'a pas.
mais ce qui me laisse perplexe, c'est que [[XXX appearance] method]
dans iOS8 c'est ok mais plante dans iOS7 et Apple ne le dit pas.
Je ne connais pas la réponse à votre question et je suis arrivé ici de google mais si vous utilisez des contrôleurs de navigation, je peux changer toute la translucidité avec cette ligne:
[self.navController.navigationBar setTranslucent:NO];
Vous ne pouvez pas modifier la propriété translucide après l'initialisation de la classe.
[newsViewNavigationController.navigationBar setTranslucent:NO];
J'ai fait quelque chose comme ça et ça a marché!