Pourquoi setTranslucent: NO] plante mon application?

Même question que celle-ci , mais cette question a été rejeté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 mets cela dans viewDidLoad de mon contrôleur de vue initial. setTranslucent apparaît sur autocomplete, et ne se plaint pas avant de tomber en panne et de parler de swizzles et autres choses.

Toute information à ce sujet serait géniale. J’ai encore beaucoup de mal à obtenir une apparence de barre d’état cohérente sur mon application.

Il semble que la propriété translucent ne puisse pas être définie avec UIAppearance . Je ne sais pas exactement pourquoi, mais je suppose que certaines propriétés ne sont tout simplement pas supscopes. Cependant, j’ai résolu ce problème en créant un UIViewController personnalisé et en faisant de toutes 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 un gros changement, mais j’espère que ça aide.

**** EDIT ****

A partir d’iOS 8, la translucidité peut être définie avec UIAppearance:

Objectif c

 if([UIDevice currentDevice].systemVersion.floatValue >= 8.0) { [[UINavigationBar appearance] setTranslucent:YES]; } 

Rapide

 if (UIDevice.currentDevice().systemVersion as NSSsortingng).floatValue >= 8.0 { UINavigationBar.appearance().translucent = true } 

Vous pouvez le tromper en spécifiant une image non existante, 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 barMesortingcs:UIBarMesortingcsDefault]; 

Je ne connais pas la réponse à votre question et je suis arrivé 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 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 la méthode [[XXX appearance] method] , la méthode doit avoir l’atsortingbut UI_APPEARANCE_SELECTOR, ou bien elle peut lancer une exception et translucent ne l’a pas.

mais ce qui me laisse perplexe, c’est que [[XXX appearance] method] dans iOS8, ça va, mais ça ne marche pas dans iOS7 et le document Apple ne le dit pas.

Vous ne pouvez pas changer 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é!