Réponses
Trop de publicités?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);
}
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.
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
(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
Non désaisonnalisées alpha
É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.
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.