web-dev-qa-db-fra.com

Définir alpha sur UIView définit l'alpha sur ses sous-vues, ce qui ne devrait pas arriver

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

La valeur de cette propriété est un nombre à virgule flottante compris entre 0,0 et 1,0, où 0,0 représente une transparence totale et 1.0, une opacité totale. Cette valeur affecte uniquement 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 ajoutez ensuite des vues secondaires à 'myView'

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

Mais ' anotherView ' a l'alpha à l'écran (il n'est pas opaque comme prévu)

Comment cela peut-il être et que peut-on faire?

80
Avner Barr

Je pense que c'est un bogue 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 prouvent également.

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 sinon, vous devrez faire de la vue un frère au lieu d’un enfant.

111
Abhi Beckert

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 parent sans affecter ses vues enfants.

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

42
Anooj VM

dans Swift

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

MISE À JOUR POUR Swift

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

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. aller à attribuer inspecteur que la couleur de fond
  3. cliquez sur "autres"
  4. régler l'opacité à 30%

ou vous pouvez définir par programme

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

C'est ça. Bonne codage !!!

18
MRizwan33

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. couleur blanche avec opacité 50%.

15
Ralf Hundewadt

La solution la plus simple, comme indiqué, consiste à modifier l'alpha comme suit: Version mise à jour pour Xcode 8 Swift 3 est:

yourParentView.backgroundColor = UIColor.black.withAlphaComponent(0.4)

Objectif c:

yourParentView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];

Reportez-vous à Apple La documentation pour les développeurs ici: https://developer.Apple.com/reference/uikit/uiview/1622417-alpha

6
Ankit Kumar Gupta

Dans Swift 4.2 et Xcode 10.1

N'ajoutez pas de couleur ni de valeur alpha dans le storyboard. Seule une approche programmatique fonctionnera dans ce cas.

transparentView.backgroundColor = UIColor.black.withAlphaComponent(0.5)
2
iOS

Voici une solution un peu complexe:

UIView *container;
UIView *myView;
UIView *anotherView;

myView.alpha = 0.5;
[container addSubview:myView];

anotherView.alpha = 1;
[container addSubview:anotherView];

Utilisez une vue container comme superview, anotherView et myView sont tous deux des sous-vues dans container, anotherView n'est pas une sous-vue dans myView.

2
likid1412

Pour l'instant, il n'y a qu'un moyen de rendre le vue parent transparent et de ne placer aucune vue enfant à l'intérieur (ne pas placer de vue sous-vue) dans la vue parent, de placer cette vue enfant en dehors du parent vue. Pour rendre la vue parent transparente, vous pouvez le faire via le storyboard.

//Transparent the parentView

parentView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.8)

Placez l'autre vue en dehors de la vue parent. Cela fonctionnera comme un charme.

1
Purnendu roy

Veuillez vous reporter à la description en gras de la documentation Xcode.

La valeur de cette propriété est un nombre à virgule flottante compris entre 0,0 et 1,0, où 0,0 représente une transparence totale et 1.0, une opacité totale. Changer la valeur de cette propriété met à jour la valeur alpha de la vue actuelle uniquement. Cependant, la transparence conférée par cette valeur alpha affecte tout le contenu de la vue, y compris ses sous-vues. Par exemple, une sous-vue avec une valeur alpha de 1.0 incorporée dans une vue parent avec une valeur alpha de 0.5, apparaît à l'écran comme si sa valeur alpha était également 0.5.

0
Danyun Liu