91

根据文档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 (它不像预期的那样不透明)

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

4

10 回答 10

123

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

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

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

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

于 2013-09-08T08:52:31.480 回答
43

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

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

于 2014-05-29T05:12:27.890 回答
30

迅速

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

为 SWIFT 3 更新

view.backgroundColor = UIColor.white.withAlphaComponent(0.5)
于 2016-03-15T19:01:02.703 回答
25

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

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

或者您可以通过编程方式设置

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

而已。快乐编码!!!

于 2017-12-28T21:15:31.810 回答
17

如果您喜欢 Storyboard,User Defined Runtime Attribute请在Identity Inspector:

Key Path: backgroundColor, Type: Color,Value:例如不透明度为 50 % 的白色。

于 2014-08-05T12:54:20.013 回答
6

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

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

目标 C:

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

在此处参考 Apple 开发人员文档: https ://developer.apple.com/reference/uikit/uiview/1622417-alpha

于 2016-12-14T11:39:58.640 回答
6

在 Swift 4.2 和 Xcode 10.1 中

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

transparentView.backgroundColor = UIColor.black.withAlphaComponent(0.5)
于 2019-04-03T09:27:44.137 回答
2

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

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

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

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

使用container视图作为超级视图,anotherView并且myView都是 中的子视图containeranotherView而不是 中的子视图myView

于 2016-02-17T03:39:52.813 回答
2

目前只有一种方法使父视图透明并且不要将任何子视图放入父视图(不要将任何视图作为子视图),将子视图放在父视图之外。要使父视图透明,您可以通过情节提要执行此操作。

//Transparent the parentView

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

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

于 2018-04-26T13:30:28.063 回答
0

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

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

于 2019-07-02T13:14:42.517 回答