iOS如何使透明视图的子视图不透明?

12
我有一个视图作为另一个视图的子视图,然后我将父视图的alpha值设置为0.5,但这也使得子视图透明,即使它的alpha值设置为1。那么当父视图的alpha值小于1时,如何使子视图不透明(不透明)?

1
我在这里是新手,非常感谢如果有人能告诉我为什么我的问题被投票否决了?这样我就可以避免在未来的提问中遇到类似的问题。 - axl411
1
@JoeBlow,感谢你如此详细的回复! - axl411
不要忘记简单的解决方案,就是不要把B设置为视图A的子视图。将B设置为包含它们两个的“容器”的子视图,但是让B处于顶部。 - Fattie
6个回答

18
最接近的方法是colorWithAlphaComponent:。使用以下类似的代码,您可以设置父视图背景的alpha组件,而不会影响子视图。
[yourSuperview setBackgroundColor:[[UIColor blackColor] colorWithAlphaComponent:0.5]];

1

如果您将父视图设置为0.5,则所有子视图也将降至0.5或更低的值。您需要采用不同的设计方法。


1
对于Swift 4.2
    self.yoursuperview.backgroundColor = UIColor.black.withAlphaComponent(0.5)

1
以下方法对我有效。
superView.backgroundColor = .clear

现在,父视图的alpha属性没有改变,它不会影响其子视图的alpha。因此,如果您为子视图设置了背景颜色,子视图将是不透明的。


0

我想你是通过Storyboard创建了视图。我之前也遇到过这个问题。请查看下面的代码,这在我的情况下是正确的。

[MyParentView setBackgroundColor:[[UIColor blackColor] colorWithAlphaComponent:0.6]];

希望这能对你有所帮助。


0

对于父视图,您应该有两个设计。一个是“启用”设计,显示它本来的样子;另一个是“禁用”设计,其中包含透明背景。

您不能使用alpha来实现这一点,因为子视图会继承alpha。如果

parent.alpha = x

view.alpha = y,则视图的实际alpha将为:

x * y


为什么这么复杂??查看其他答案以获得更好的方法。 - ATV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接