Selon la documentation pour 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 totalement transparent et 1,0 représente totalement opaque. Cette valeur affecte uniquement la vue courante et n'affecte aucune de ses sous-vues incorporé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 puis ajoutez des sous-vues à «myView»
[myView addSubView anotherView];
anotherView.alpha = 1;
NSLog(@"anotherView alpha = %f",anotherView.alpha); // prints 1.0000 as expected
Mais ' anotherView ' a un alpha à l'écran (il n'est pas opaque comme prévu)
Comment cela peut-il être et que peut-on faire?
ios
objective-c
uiview
alpha-transparency
Avner Barr
la source
la source
self.myView
? et en ajouter un autre Voir comme[self.self addSubview:self.myView];
alpha
valeur qui est la valeur de toutes les sous-vuesalpha
, multipliée. par exemple , si l'alpha subviews0.8
et alpha de l'superview était1.0
, mais vous changer à0.6
l'alpha subviews est toujours le même,0.8
. la valeur alpha de la sous-vue rendue n'est modifiée que de0.8
à0.48
.Réponses:
Je pense que c'est un bogue dans la documentation. Vous devez le déposer sur bugreport.apple.com.
Tout ce que je peux voir après un peu de recherche rapide suggère que ce que vous voyez, c'est comment il s'est toujours comporté, et mes propres tests le montrent aussi.
L'alpha d'une vue est appliquée à toutes les sous-vues.
Tout ce dont vous avez besoin est peut-être,
[[UIColor blackColor] colorWithAlphaComponent:0.5]
mais sinon, vous devrez faire de la vue un frère au lieu d'un enfant.la source
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 enfants.
[parentView setBackgroundColor: [[UIColor clearColor] colorWithAlphaComponent: 0.5]];
la source
En rapide
view.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.5)
MISE À JOUR POUR SWIFT 3
view.backgroundColor = UIColor.white.withAlphaComponent(0.5)
la source
Définir l'opacité de la couleur d'arrière-plan au lieu de alpha n'affectera pas ses vues enfants.
Ou vous pouvez définir par programmation
var customView:UIView = UIView() customView.layer.opacity = 0.3
C'est ça. Bon codage !!!
la source
Si vous aimez les storyboards, mettez un
User Defined Runtime Attribute
pour votre vue dans leIdentity Inspector
:Key Path: backgroundColor
,Type: Color
,Value:
Par exemple couleur blanche avec Opacité 50%.la source
La solution la plus simple comme discuté est de changer l'alpha comme suit: La 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 à la documentation Apple Developer ici: https://developer.apple.com/reference/uikit/uiview/1622417-alpha
la source
Dans Swift 4.2 et Xcode 10.1
N'ajoutez pas de couleur et de valeur alpha via le storyboard. Seule l'approche programmatique fonctionnera dans ce cas.
transparentView.backgroundColor = UIColor.black.withAlphaComponent(0.5)
la source
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
container
vue en tant que vue superviséeanotherView
etmyView
sont toutes deux sous-vue danscontainer
,anotherView
n'est pas une sous-vue dansmyView
.la source
Pour l'instant, il n'y a qu'une seule façon de rendre la vue parent transparente et de ne pas mettre de vues enfants à l'intérieur (ne mettez aucune vue en tant que sous-vue) la vue parent, mettez ces vues enfants en dehors de la vue parent. 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.
la source
Veuillez vous référer à la description en gras de la documentation Xcode.
la source