55 votes

iOS 7: Désactiver la translucidité UINavigationBar pour l'ensemble de l'application

Est-il un moyen de désactiver UINavigationBar Translucidité pour une application entière?

Je suis conscient que l'utilisation de [self.navigationController.navigationBar setTranslucent:NO] pouvez résoudre ce problème pour un seul contrôleur, mais j'ai beaucoup de UINavigationBars dans mon application et c'est assez fastidieux de la solution.

J'ai essayé d' [[UINavigationBar appearance] setTranslucent:NO], mais cette fonctionnalité n'est étonnamment pas pris en charge. Faire que les résultats en Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** Illegal property type, c for appearance setter, _installAppearanceSwizzlesForSetter:'

Si je dois le faire, je peux aller dans ma totalité de l'app réglage UINavigationBars pour désactiver la translucidité, un par un, mais il doit y avoir une solution plus élégante à ce problème...

33voto

Roshan Points 264

Si vous définissez la translucidité de la première navigationBar dans la pile false [self.navigationController.navigationBar setTranslucent:NO], il reflète dans tous le NavigationViewController suivante qui sont poussés vers cette pile.

3voto

Kyle Clegg Points 8441

Je pense que vous avez raison sur aucune apparence de proxy disponible pour ce bien. Êtes-vous à l'aide de UINavigationControllers ou UINavigationBar objets? Si vous utilisez UINavigationBars vous pourriez sous-classe et de créer un non-translucide de la barre de navigation.

Fichier d'en-tête:

#import <UIKit/UIKit.h>

@interface ABCNonTranslucentNavBar : UINavigationBar

@end

La mise en œuvre de fichier:

#import "ABCNonTranslucentNavBar.h"

@implementation ABCNonTranslucentNavBar

- (void)drawRect:(CGRect)rect
{
  [self setTranslucent:NO];
}

Ensuite, il suffit de remplacer le UINavigationBars avec votre sous-classe. Vous pouvez aussi faire quelque chose de similaire avec un sous-classé UINavigationController.

3voto

JulianB Points 885

Ajoutant ceci au cas où n'importe qui lutterait toujours ceci.

Vous pouvez le tromper en spécifiant une image inexistante, ce qui rendra la barre de navigation INCLUANT que sa barre d'outils deviendra 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];
 

2voto

BDR Points 63

Je sais que c'est vieux, mais cela pourrait être utile pour quelqu'un;

Vous pouvez utiliser une catégorie et y définir * la propriété [translucent][1]

 @implementation UINavigationBar (MakeTranslucent)

-(void)willMoveToWindow:(UIWindow *)newWindow {
    [super willMoveToWindow:newWindow];


    self.translucent = NO;
}
@end
 
  • J'ai utilisé willMoveToWindow, je ne sais pas si c'est une bonne idée alors UAYOR.

0voto

kshitij godara Points 501

Je pense que l'apparence api ne prend pas en charge la propriété translucide de la barre de navigation. Mais vous pouvez faire cela pour toute l'application comme celle-ci, jetez un coup d'œil à ce code -

L'écran de menu ici est un contrôleur de vue racine.

 MenuScreen *ms = [[MenuScreen alloc]initWithNibName:@"MenuScreen" bundle:nil];

UINavigationController *nv = [[UINavigationController alloc]initWithRootViewController:ms];

//This will set property for whole App.
[nv.navigationBar setTranslucent:NO];

self.window.rootViewController = nv ;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X