92 votes

Le réglage de l'alpha d'une UIView modifie l'alpha de ses sous-vues, ce qui ne devrait pas se produire.

Selon la documentation de UIVIew @property(nonatomic) CGFloat alpha

La valeur de cette propriété est un nombre à virgule flottante dans la gamme 0.0 à 1,0, où 0,0 représente une transparence totale et 1,0 représente une transparence totalement Cette valeur n'affecte que la vue actuelle et n'affecte aucune de ses sous-vues intégrées.

J'ai une vue de conteneur configurée comme suit :

self.myView.backgroundColor = [UIColor blackColor];
self.myView.alpha = 0.5;
[self addSubview:self.myView];

Et ensuite ajouter des sous-vues à myView

[myView addSubView anotherView];
anotherView.alpha = 1;
NSLog(@"anotherView alpha = %f",anotherView.alpha); // prints 1.0000 as expected

Mais autreView L'alpha est présent à l'écran (il n'est pas opaque comme prévu).

Comment cela est-il possible et que peut-on faire ?

123voto

Abhi Beckert Points 10768

Je pense que c'est un bug dans la documentation. Vous devriez le déposer à bugreport.apple.com.

Tout ce que je peux voir après quelques recherches rapides suggère que ce que vous voyez est la façon dont il s'est toujours comporté, et mes propres tests le montrent aussi.

L'alpha d'une vue est appliqué à toutes les sous-vues.

Peut-être que tout ce dont vous avez besoin est [[UIColor blackColor] colorWithAlphaComponent:0.5] mais si ce n'est pas le cas, vous devrez faire de la vue un frère ou une sœur au lieu d'un enfant.

43voto

Anooj VM Points 190

Ne définissez pas l'alpha directement sur la vue parent. Au lieu de cela, utilisez la ligne de code ci-dessous qui appliquera la transparence à la vue parentale sans affecter ses vues enfant.

[parentView setBackgroundColor :[[UIColor clearColor] colorWithAlphaComponent:0.5]] ;

30voto

En rapide

view.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.5)

MISE À JOUR POUR SWIFT 3

view.backgroundColor = UIColor.white.withAlphaComponent(0.5)

27voto

MRizwan33 Points 1112

Définir l'opacité de la couleur d'arrière-plan au lieu de l'alpha n'affectera pas ses vues enfant.

  1. sélectionnez la vue.
  2. allez dans l'inspecteur d'attributs puis dans la couleur de fond
  3. Cliquez sur "Autres".
  4. Définir l'opacité à 30%.

Ou vous pouvez le régler par programme

var customView:UIView = UIView()
customView.layer.opacity = 0.3

C'est tout. Bon codage ! !!

17voto

Ralf Hundewadt Points 375

Si vous aimez les Storyboards, mettez un User Defined Runtime Attribute pour votre vue dans le Identity Inspector :

Key Path: backgroundColor , Type: Color , Value: Par exemple, une couleur blanche avec une opacité de 50 %.

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