在UIView上设置alpha将在其子视图上设置alpha,这不应该发生

根据UIVIew @property(nonatomic) CGFloat alpha的文档

此属性的值是一个浮点数,范围为0.0到1.0,其中0.0表示完全透明,1.0表示完全不透明。 该值仅影响当前视图,不影响其embedded的子视图。

我有一个容器视图configuration如下:

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

然后添加子视图到'myView'

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

但是“ 另一个视图 ”在屏幕上确实有alpha(它并不像预期的那样是不透明的)

这怎么可能做什么?

我认为这是文档中的一个错误。 你应该在bugreport.apple.com上提交。

经过一番快速的研究,我所能看到的一切都表明你所看到的是它总是performance出来的,我自己的testing也显示了它。

视图的alpha值应用于所有子视图。

也许所有你需要的是[[UIColor blackColor] colorWithAlphaComponent:0.5]但如果不是,你将需要使视图是兄弟而不是孩子。

不要直接在父视图上设置alpha。 而不是使用下面的代码行,将不会影响其子视图应用透明度的父视图。

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

迅速

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

更新SWIFT 3

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

如果您喜欢Storyboards,请在Identity Inspector为您的视图添加一个User Defined Runtime Attribute

Key Path: backgroundColorType: ColorValue:例如不透明度为50%的白色。

这是一个复杂的解决scheme:

 UIView *container; UIView *myView; UIView *anotherView; myView.alpha = 0.5; [container addSubview:myView]; anotherView.alpha = 1; [container addSubview:anotherView]; 

使用container视图作为myView视图, anotherViewmyView都是container子视图, anotherView不是myView的子视图。

所讨论的最简单的解决scheme是更改alpha如下所示:更新版本的Xcode 8 Swift 3是:

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

目标C:

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

请参阅Apple Developer Docs: https : //developer.apple.com/reference/uikit/uiview/1622417-alpha