web-dev-qa-db-fra.com

La couleur d’arrière-plan de UINavigationBar n’est pas exactement celle d’UIColor

S'il vous plaît regardez la capture d'écran ci-dessous.

J'ai défini toutes les couleurs de teinte du même objet UIColor pour UINavigationBar, la barre de recherche et la barre d'outils en bas. Mais pour une raison quelconque, la couleur de la barre de navigation est légèrement différente. Quelle pourrait être la raison de cela?

Merci.. 

screenshot

29
özg

La différence entre votre barre de navigation et votre barre de recherche est due au fait que la barre de navigation est translucide, le système appliquera une valeur alpha par défaut pour la barre de navigation.

Essayez self.navigationController.navigationBar.translucent = NO;

58
Danyun Liu

UINavigationBar a un comportement un peu étrange en ce qui concerne la couleur que vous définissez dessus. Comme d'autres membres l'ont fait remarquer, vous devez définir le translucent boolean sur false, mais ce n'est pas tout pour que votre barre corresponde à la couleur que vous essayez de définir. Ce sera proche, mais si vous regardez attentivement ce ne sera pas la couleur exacte que vous essayez d'utiliser. Afin de définir la couleur true sur UINavigationBar, vous devez comprendre ce qu’elle fait.

Disons que je voulais régler mon UINavigationBar sur cette couleur verte rafraîchissante.

 enter image description here

Ce serait une valeur RVB de: R = 90 | G = 200 | B = 95.

Ce que UINavigationBar fera, c'est d'appliquer son style intégré en donnant à ce vert un aspect "brillant". Le résultat pour nous est que cela prend nos valeurs RVB vertes et upping chacune d’un facteur 20.

 enter image description here

Si vous regardez de près, le carré vert ci-dessus ne correspond pas exactement à celui que UINavigationBar affiche avec les mêmes valeurs RVB. Cela semble juste légèrement plus lumineux.

Pour résoudre ce problème, réduisez simplement les valeurs RBG de 20 pour la couleur que vous souhaitez utiliser pour les UINavigationBar dans votre application.

Donc R = 90 | G = 200 | B = 95 deviendra R = 70 | G = 180 | B = 75.

 enter image description here

26
Brandon A

Il diffère en raison de l'effet de flou UINavigationBar par défaut. Je peux suggérer de définir une image d'arrière-plan extensible d'une largeur de 2px avec votre couleur .

    UIImage *image = [UIImage imageNamed:@"yourBlueImage"];
    image = [image stretchableImageWithLeftCapWidth:image.size.width / 2.0f topCapHeight:0.0f];
    [yourNavBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];

C'est comme une astuce, car lorsque vous définissez un effet de flou backgroundImage personnalisé, l'effet de flou est désactivé et vous obtenez une couleur exacte.

4
Krivoblotsky
navigationBar.barStyle = UIBarStyle.blackOpaque

Travaillé pour empêcher les mélanges indésirables avec l'arrière-plan, lorsqu'aucune des réponses précédentes ne fonctionnait (dans iOS 9.3).

2
atraczyk

J'ai eu le même problème que l'op. Après nombre d'heures de tentatives infructueuses, j'ai décidé de changer la logique dans mon code:

First , définit la couleur de fond de la barre de navigation:

navigationBar.barTintColor = UIColor.red

iOS rendra le rouge un peu plus foncé/plus clair, comme décrit par d'autres dans ce fil. 

Deuxièmement , prenez la couleur de la barre de navigation et réglez-la sur ce dont vous avez besoin, dans mon cas, l'arrière-plan de la cellule:

cell.backgroundColor = navigationBar.barTintColor

Maintenant les couleurs seront les mêmes.

1
Tomas

J'ai essayé toutes les solutions mentionnées dans les réponses. Mais rien ne l'a complètement résolu. J'ai trouvé ça:

Tout d’abord, vous devez sélectionner la barre de navigation et désactiver la case à cocher translucide. C'est juste au sommet. 

Après cela est fait. Le BackgroundColor est toujours faux. Donc, ne définissez pas BackgroundColor, définissez le TintColor de la NavBar. Vous pouvez le faire de la même manière que le Translucent. La possibilité de définir le TintColor est de 2 éléments sous la case à cocher translucide. 

Ou vous le configurez avec Swift ou objC:

self.navigationController?.navigationBar.isTranslucent = false  
navBar.barTintColor = UIColor.CustomColor.colorPrimary
1
Yvonne Marggraf

Essayez ceci, ça marche

navigationController? .navigationBar.shadowImage = UIImage () navigationController? .navigationBar.setBackgroundImage (UIImage (), pour: .default)

0
abhi