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?
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.
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]];
dans Swift
view.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.5)
MISE À JOUR POUR Swift
view.backgroundColor = UIColor.white.withAlphaComponent(0.5)
Définir l'opacité de la couleur d'arrière-plan au lieu de l'alpha n'affectera pas ses vues enfant.
ou vous pouvez définir par programme
var customView:UIView = UIView()
customView.layer.opacity = 0.3
C'est ça. Bonne codage !!!
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%.
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
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)
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
.
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.
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.