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

时间:2013-09-08 08:33:50

标签: ios objective-c uiview alpha-transparency

根据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];

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

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

但是' anotherView '确实在屏幕上显示了alpha(它不是预期的不透明)

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

10 个答案:

答案 0 :(得分:109)

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

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

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

也许您需要的只是[[UIColor blackColor] colorWithAlphaComponent:0.5]但如果不是,您将需要将视图视为兄弟而不是孩子。

答案 1 :(得分:40)

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

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

答案 2 :(得分:24)

快速

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

更新SWIFT 3

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

答案 3 :(得分:15)

如果您喜欢故事板,请在User Defined Runtime Attribute中为您的观点添加Identity Inspector

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

答案 4 :(得分:15)

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

  1. 选择视图。
  2. 转到属性检查器而不是背景颜色
  3. 点击“其他人”
  4. 将不透明度设置为30%
  5. 或者您可以通过程序设置

    var customView:UIView = UIView()
    customView.layer.opacity = 0.3
    

    多数民众赞成。快乐的编码!!!

答案 5 :(得分:6)

讨论的最简单的解决方案是更改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

答案 6 :(得分:2)

这是一个有点复杂的解决方案:

UIView *container;
UIView *myView;
UIView *anotherView;

myView.alpha = 0.5;
[container addSubview:myView];

anotherView.alpha = 1;
[container addSubview:anotherView];

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

答案 7 :(得分:1)

目前只有一种方法可以让父视图透明,不要将任何子视图放在里面(不要把任何视图作为子视图)放在父视图中父视图之外的子视图。要使父视图透明,您可以通过故事板进行此操作。

//Transparent the parentView

parentView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.8)

将另一个视图放在父视图之外。它会像魅力一样发挥作用。

答案 8 :(得分:0)

在Swift 4.2和Xcode 10.1中

不要通过情节提要添加视图颜色和Alpha值。在这种情况下,只有程序化方法才行。

transparentView.backgroundColor = UIColor.black.withAlphaComponent(0.5)

答案 9 :(得分:0)

请参阅Xcode文档中的粗体描述。

  

此属性的值是0.0到1.0范围内的浮点数,其中0.0表示完全透明,而1.0表示完全不透明。更改此属性的值只会更新当前视图的alpha值。 但是,该Alpha值赋予的透明度会影响该视图的所有内容,包括其子视图。例如,一个Alpha值为1.0的子视图嵌入到具有Alpha值的父视图中。 0.5,就好像它的alpha值也是0.5一样出现在屏幕上。