在UIView上设置alpha会在其子视图上设置不应发生的alpha

Avn*_*arr 80 objective-c alpha-transparency uiview ios

根据文件 UIVIew @property(nonatomic) CGFloat alpha

此属性的值是0.0到1.0范围内的浮点数,其中0.0表示完全透明,1.0表示完全不透明. 此值仅影响当前视图,不会影响其任何嵌入的子视图.

我有一个容器视图配置如下:

self.myView.backgroundColor = [UIColor blackColor];
self.myView.alpha = 0.5;
[self addSubview:self.myView];
Run Code Online (Sandbox Code Playgroud)

然后将子视图添加到'myView'

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

但' anotherView '在屏幕上确实有alpha(它不像预期的那样不透明)

这怎么可能,可以做些什么?

Abh*_*ert 112

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

经过一些快速研究后我能看到的一切表明你所看到的是它总是表现得如何,我自己的测试也表明了这一点.

视图的alpha应用于所有子视图.

也许你需要的只是[[UIColor blackColor] colorWithAlphaComponent:0.5]但如果不是你需要让视图成为兄弟而不是孩子.

  • +1.FWIW,我认为文件可以说是正确的,如果非常不清楚(对于所有实际目的而言都是不正确的).子视图的alpha会受到影响,但不会影响alpha值.我认为,对于隐藏属性,这是相同的行为.设置隐藏隐藏子视图,但不会导致设置子视图隐藏属性. (21认同)
  • 我要求显示一些像uipopover的东西,但是在iphone中.我必须用[[UIColor blackColor] colorWithAlphaComponent:0.5]创建一个uiviewcontroller.谢谢它工作了 (2认同)
  • 我根本不相信这些文档"可以说是正确的".在现实世界中,开发人员将阅读文档并相信儿童alphas不受影响.实际上,当合成结果就好像修改了alphas一样.这只是一个糟糕的文档案例. (2认同)

Ano*_* VM 42

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

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


Naz*_*kyi 25

在迅速

view.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.5)
Run Code Online (Sandbox Code Playgroud)

更新SWIFT 3

view.backgroundColor = UIColor.white.withAlphaComponent(0.5)
Run Code Online (Sandbox Code Playgroud)

  • 这并没有解决问题. (2认同)

MRi*_*n33 19

设置背景颜色的不透明度而不是alpha不会影响其子视图.

  1. 选择视图.
  2. 转到属性检查器而不是背景颜色
  3. 点击"其他"
  4. 将不透明度设置为30%

或者您可以通过程序设置

var customView:UIView = UIView()
customView.layer.opacity = 0.3
Run Code Online (Sandbox Code Playgroud)

而已.快乐的编码!!!


Ral*_*adt 15

如果您喜欢Storyboards,User Defined Runtime Attribute请在以下位置添加您的视图Identity Inspector:

Key Path: backgroundColor,Type: Color,Value:例如白色与不透明度50%.


Ank*_*pta 6

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

yourParentView.backgroundColor = UIColor.black.withAlphaComponent(0.4)
Run Code Online (Sandbox Code Playgroud)

目标C:

yourParentView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
Run Code Online (Sandbox Code Playgroud)

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


iOS*_*iOS 6

在 Swift 4.2 和 Xcode 10.1 中

不要通过故事板添加颜色和 alpha 值。在这种情况下,只有程序化的方法才有效。

transparentView.backgroundColor = UIColor.black.withAlphaComponent(0.5)
Run Code Online (Sandbox Code Playgroud)