在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: backgroundColor
, Type: Color
, Value:
例如不透明度为50%的白色。
这是一个复杂的解决scheme:
UIView *container; UIView *myView; UIView *anotherView; myView.alpha = 0.5; [container addSubview:myView]; anotherView.alpha = 1; [container addSubview:anotherView];
使用container
视图作为myView
视图, anotherView
和myView
都是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