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,UILabel
s 默认情况下具有完全透明的背景,因此如果您希望它具有背景颜色,则必须将其背景颜色设置为白色。因此,您不需要介于两者之间的视图。此外,您可以适当地设置情节提要中的所有内容(如果您使用它)。
我想要一个半透明的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)
【讨论】:
谢谢,这似乎就像下面@Vitaliy 的回答。我也会试试这个,周一让你知道!谢谢 嘿,请检查我的编辑!我已经尝试了您的解决方案,但它并没有按照我想要的方式工作! 斯威夫特 3:UIColor.white.withAlphaComponent(0.5)
这就是我所需要的,不影响视图的子视图。【参考方案6】:
您也可以通过更改颜色的不透明度从InterfaceBuilder
设置它:
【讨论】:
这是理想的选择,因为更改视图本身的 alpha 值会逐渐下降并影响其中的任何内容。【参考方案7】:你发现的问题是view
和你的UIView
不一样。 “视图”是指整个视图。例如,您的主屏幕是一个视图。
您需要将整个“视图”清楚地分开您的“UIView”和“UILabel”
您可以通过转到您的故事板、单击项目、身份检查器并更改 Restoration ID
来完成此操作。
现在使用恢复 ID 访问代码中的每个项目
【讨论】:
我只使用 UIViews,例如:`var label_view = UIView()',并且视图是通过编程完成的,没有使用故事板。谢谢你的提示!以上是关于Swift UIView 背景颜色不透明度的主要内容,如果未能解决你的问题,请参考以下文章