172 votes

Lumineux, réalisation de vives couleurs pour un iOS 7 UINavigationBar translucide


52voto

Anthony Points 2440

iOS 7.0.3: Comme vous le voyez ci-dessus 7.0.3 changé les choses. J'ai mis à jour mon gist. J'espère que ce sera tout simplement disparaître en tant que peuple de mise à niveau.

Réponse Originale À Cette Question: J'ai fini avec un hack combinant les deux autres réponses. Je suis sous-classement UINavigationBar et l'ajout d'une couche à l'arrière avec un peu d'espace supplémentaire pour couvrir si l'un des différents hauteur des barres de statut sont en place. La couche est ajusté dans la mise en forme des sous-vues et la couleur change chaque fois que vous définissez barTintColor.

Résumé: https://gist.github.com/aprato/6631390

setBarTintColor

  [super setBarTintColor:barTintColor];
  if (self.extraColorLayer == nil) {
    self.extraColorLayer = [CALayer layer];
    self.extraColorLayer.opacity = self.extraColorLayerOpacity;
    [self.layer addSublayer:self.extraColorLayer];
  }
  self.extraColorLayer.backgroundColor = barTintColor.CGColor;

layoutSubviews

  [super layoutSubviews];
  if (self.extraColorLayer != nil) {
    [self.extraColorLayer removeFromSuperlayer];
    self.extraColorLayer.opacity = self.extraColorLayerOpacity;
    [self.layer insertSublayer:self.extraColorLayer atIndex:1];
    CGFloat spaceAboveBar = self.frame.origin.y;
    self.extraColorLayer.frame = CGRectMake(0, 0 - spaceAboveBar, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds) + spaceAboveBar);
  }

10voto

iBhavesh Points 751

Le comportement de tintColor pour les barres a changé sur iOS 7.0. Il n’est plus influe sur la barre du fond et se comporte comme pour la propriété tintColor ajouté à UIView. Pour teinter la barre du fond, s’il vous plaît utilisez - barTintColor.You pouvez utiliser code suivant pour améliorer l’application de fonctionner avec les ios6 et ios7.

Voici IS_IOS7 macro qui est déclarée comme suit dans le fichier .pch de l’application.

9voto

timeuser Points 1418

Je n’est pas venu avec cette solution, mais elle semble fonctionner assez bien. J’ai juste ajouté il à viewDidLoad sur mon sous-classe de UINavigationController.

Source : https://gist.github.com/alanzeino/6619253

6voto

Kevin Points 1389

Une basse-fi serait probablement épingler un UIView c'est la hauteur de la Barre de Navigation en haut de la vue derrière le bar. Faire de ce point de vue la même couleur que la barre de navigation mais de jouer avec l'alpha jusqu'à ce que vous obtenir les effets désirés:

UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.navigationController.navigationBar.frame), 64)];
    backgroundView.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:1 alpha:.5];

[self.navigationController.view insertSubview:backgroundView belowSubview:self.navigationController.navigationBar];

UIView derrière

enter image description here

(Modifié la couleur de la baisse des exemples pour mettre l'accent sur la transparence. Transparence/le flou est plus perceptible lorsque dans le mouvement.)

Dérivation de l' UINavigationBar et le placement de ce même point de vue au-dessus de l'arrière-plan, mais derrière tout le reste va probablement obtenir des résultats similaires tout en étant moins hacky.


Une autre solution, j'ai vu ballotté est jouer avec l'alpha de l' UINavigationBar:

self.navigationController.navigationBar.alpha = 0.5f;

Edit: en Fait, après des tests, il semble que ce ne fournit pas l'intention de comportement (ou de tout comportement):

8. à l'alpha

Navigation bar with .8 alpha

Non désaisonnalisées alpha

enter image description here

Évidemment, vous ne voulez le faire sur iOS 7 appareils. Donc, ajouter un peu de vérification de version avant de mettre en œuvre l'une de ces.

4voto

bernhard Points 61

Au lieu de créer votre UIColor objet dans le RGB format, l'utilisation de HSB et d'augmenter le paramètre saturation. (Crédits de Sam Soffes qui décrit cette méthode ici)

navigationBar.barTintColor = [UIColor colorWithHue:0.555f saturation:1.f brightness:0.855f alpha:1.f];

Remarque: Cette solution est un compromis et ne fonctionne pas bien pour les couleurs avec une forte saturation.

Pour choisir la TEINTE de la couleur de votre conception, vous pouvez utiliser un outil comme ColorSnapper qui vous permet de copier simplement la UIColor HSB format.

Vous pouvez également essayer les UIColor Catégorie (GitHub Lien) de David Keegan afin de modifier les couleurs.

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