Swift UIView 背景颜色不透明度

Posted

技术标签:

【中文标题】Swift UIView 背景颜色不透明度【英文标题】:Swift UIView background color opacity 【发布时间】:2015-02-10 21:40:30 【问题描述】:

我有一个UIView,里面有一个UILabel。我希望 UIView 具有白色背景色,但不透明度为 50%。设置view.alpha = 0.5 的问题是标签的不透明度也为 50%,所以我发现可能有一个 UIView 具有白色背景颜色和不透明度(white_view),然后有另一个带有标签的UIView (label_view)。然后通过执行以下操作将“white_view”添加到“label_view”:label_view.addSubview(white_view)。这显然行不通。我想这样做:label_view.backgroundView(white_view),但您不能像在 UICollectionView 中那样在 UIView 上设置背景视图。

有人知道如何解决这个问题吗?

编辑 因为几个答案大致相同,所以我会在这里输入。 现在我什至尝试了这些:

label_view1.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.5)
label_view1.addSubview(firstPlacelbl)
endGameView.addSubview(label_view1)

label_view1.backgroundColor = UIColor(white: 1, alpha: 0.5)
label_view1.addSubview(firstPlacelbl)
endGameView.addSubview(label_view1)

标签仍然受到 alpha 的影响,它的不透明度为 50%。我不明白我做错了什么,因为我只将颜色 alpha 设置为 0.5 而不是标签。有什么想法吗?

【问题讨论】:

如果我对这个问题的理解正确,您希望有一个半透明的UIView 和一个不透明的白色背景作为UILabel 的背景。 Afaik,UILabels 默认情况下具有完全透明的背景,因此如果您希望它具有背景颜色,则必须将其背景颜色设置为白色。因此,您不需要介于两者之间的视图。此外,您可以适当地设置情节提要中的所有内容(如果您使用它)。 我想要一个半透明的UIView,背景颜色为白色,并在其顶部添加标签(如果不能在新视图中使用)。所以它就像一个半透明的盒子,上面有一个 100% 可见的标签。我认为@Vitaliy 下面的回答应该有效! 【参考方案1】:

适用于 Swift 4.x 及更高版本

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

【讨论】:

【参考方案2】:

您可以将视图的背景颜色设置为带有alpha的UIColor,并且不影响view.alpha

view.backgroundColor = UIColor(white: 1, alpha: 0.5)

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

【讨论】:

这看起来像我要找的。我会在星期一回家的时候试一试,然后告诉你! 您需要将父 UIView 背景颜色设置为带有 alpha 的 UIColor:endGameView.backgroundColor = UIColor(white: 1, alpha: 0.5) 而不是您的 UILabel 正是我想要的【参考方案3】:

在 Swift 中很简单。只需将此颜色放入背景视图颜色中即可。

let dimAlphaRedColor =  UIColor.redColor().colorWithAlphaComponent(0.7)
yourView.backGroundColor =  dimAlphaRedColor

【讨论】:

【参考方案4】:

问题老了,但好像也有人有同样的顾虑。

您如何看待“UIColor 的 alpha 属性和 Interface Builder 的 opacity 属性在代码中的应用不同”的观点?


在 Interface Builder 中创建的两个视图最初是不同的颜色,但当条件发生变化时必须是相同的颜色。 因此,我不得不在代码中设置一个视图的背景颜色,并设置不同的值以使两个视图的背景颜色相同。

作为一个实际的例子,Interface Builder 的背景颜色为 0x121212,Opacity 值为 80%(在 Amani Elsaed 的图像中::红色:18,绿色:18,蓝色:18,十六进制颜色#:[121212],不透明度:80), 在代码中,我将另一个视图的背景颜色设置为 0x121212,alpha 值为 0.8。

self.myFuncView.backgroundColor = UIColor(red: 18, green: 18, blue: 18, alpha: 0.8)

扩展名

extension UIColor 
    convenience init(red: Int, green: Int, blue: Int, alpha: CGFloat = 1.0) 
        self.init(red: CGFloat(red) / 255.0,
                  green: CGFloat(green) / 255.0,
                  blue: CGFloat(blue) / 255.0,
                  alpha: alpha)
    

然而,实际的看法是

“在 Interface Builder 中指定背景颜色的视图”:R 0.09 G 0.09 B 0.09 alpha 0.8。 '按代码查看背景颜色':R 0.07 G 0.07 B 0.07 alpha 0.8

计算它,

0x12 = 18(十进制) 18/255 = 0.07058... 255 * 0.09 = 22.95 23(十进制)= 0x17

所以,我可以通过将 UIColor 值设置为 17、17、17 和 alpha 0.8 来类似地匹配颜色。

self.myFuncView.backgroundColor = UIColor(red: 17, green: 17, blue: 17, alpha: 0.8)

或者谁能告诉我我错过了什么?

【讨论】:

【参考方案5】:

设置视图的alpha 属性会影响其子视图。如果您只想透明背景将视图的backgroundColor 属性设置为 alpha 分量小于 1 的颜色。

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

【讨论】:

谢谢,这似乎就像下面@V​​italiy 的回答。我也会试试这个,周一让你知道!谢谢 嘿,请检查我的编辑!我已经尝试了您的解决方案,但它并没有按照我想要的方式工作! 斯威夫特 3:UIColor.white.withAlphaComponent(0.5) 这就是我所需要的,不影响视图的子视图。【参考方案6】:

您也可以通过更改颜色的不透明度从InterfaceBuilder 设置它:

【讨论】:

这是理想的选择,因为更改视图本身的 alpha 值会逐渐下降并影响其中的任何内容。【参考方案7】:

你发现的问题是view和你的UIView不一样。 “视图”是指整个视图。例如,您的主屏幕是一个视图。

您需要将整个“视图”清楚地分开您的“UIView”和“UILabel”

您可以通过转到您的故事板、单击项目、身份检查器并更改 Restoration ID 来完成此操作。

现在使用恢复 ID 访问代码中的每个项目

【讨论】:

我只使用 UIViews,例如:`var label_view = UIView()',并且视图是通过编程完成的,没有使用故事板。谢谢你的提示!

以上是关于Swift UIView 背景颜色不透明度的主要内容,如果未能解决你的问题,请参考以下文章

UIView的不透明alpha和背景颜色之间有什么关系?

UIView背景颜色和顶部透明png

iPhone - UIView 的背景颜色 - 使用具有透明度的 png?

动画 UIView 背景颜色 swift

无法设置 UIView 的背景颜色 Swift 5

Swift - 设置UIView的背景色和背景图片