Swift UIView背景色不透明度

101

我有一个包含UILabelUIView。我想让这个UIView具有白色背景颜色,但不透明度为50%。设置view.alpha = 0.5的问题是标签也会有50% 的不透明度。因此,我想到可以创建一个带有不透明度的白色背景的UIView(称作"white_view"),再创建一个包含标签的UIView(称作"label_view")。然后通过label_view.addSubview(white_view) 将 "white_view" 添加到 "label_view" 中。但是,这似乎不起作用。我想实现类似于 UICollectionView 中的backgroundView(white_view) 的效果,但是在UIView上无法像在UICollectionView上一样设置背景视图。

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

编辑 因为有几个答案差不多,所以我在这里简述一下。

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)

标签仍受α的影响,其不透明度为50%。我不明白我哪里做错了,因为我只将颜色的α值设置为0.5,而没有设置标签的α值。有任何想法吗?


如果我正确理解了这个问题,您想要一个半透明的 UIView 和一个非透明的白色背景用于其上的 UILabel。据我所知,UILabel 默认情况下具有完全透明的背景,因此如果您希望它具有背景颜色,则必须将其背景颜色设置为白色。因此,您不需要中间的视图。此外,如果您使用 Storyboard,可以适当地设置所有内容。 - Nero
我想要一个半透明的UIView,带有白色背景颜色,并且标签位于其顶部(如果在同一视图中无法工作,则在新视图中)。因此,它就像一个半透明的框,标签是100%可见的。我认为下面@Vitaliy的答案应该可以解决! - user2099024
7个回答

223

您可以使用带透明度的UIColor设置视图的背景颜色,而不影响view.alpha:

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

或者

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


这看起来就是我想要的。我会在周一回家后尝试并告诉你的! - user2099024
你需要将父级UIView的背景颜色设置为带有alpha值的UIColor:endGameView.backgroundColor = UIColor(white: 1, alpha: 0.5),而不是你的UILabel。 - Vitalii Gozhenko
正是我所需要的。 - John Leonardo

76

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

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

谢谢,这似乎与下面@Vitaliy的答案相似。我也会尝试一下,并在周一告诉你!谢谢 - user2099024
嘿,请检查我的编辑!我尝试了你的解决方案,但它并不按照我想要的方式工作! - user2099024
5
Swift 3中的 UIColor.white.withAlphaComponent(0.5) 表示将白色颜色透明度设置为0.5。 - BlueBoy
这就是我需要的,不影响视图的子视图。 - Zhou Haibo

42

适用于Swift 4.x及以上版本

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


14

你还可以通过在 InterfaceBuilder 中更改颜色的不透明度来设置它:

输入图像描述


这是理想的,因为更改视图本身的 alpha 值将会向下传递并影响其中的任何内容。 - Micah Montoya

1
你遇到的问题是view与你的UIView不同。'view'指整个视图,例如你的主屏幕就是一个视图。
你需要清楚地区分整个'view'、你的'UIView'和'UILabel'。
你可以通过进入你的Storyboard,点击该项,选择Identity Inspector,然后更改Restoration ID来实现这一点。
现在,使用还原ID来访问代码中的每个项目。

我只使用UIView,例如:var label_view = UIView(),并且视图是通过编程完成的,没有使用story board。谢谢你的提示! - user2099024

0

在Swift中很简单。只需将此颜色放入您的背景视图颜色中,它就会起作用。

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

0

这个问题很老了,但似乎还有人有同样的疑虑。

你认为“UIColor的alpha属性和Interface Builder的opacity属性在代码中应用方式不同”的观点怎么样?


在Interface Builder中创建的两个视图最初是不同的颜色,但当条件改变时必须是相同的颜色。 因此,我必须在代码中设置一个视图的背景颜色,并设置不同的值以使两个视图的背景颜色相同。
作为实际示例,Interface Builder的背景颜色为0x121212,不透明度为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)

还有人可以告诉我我缺少什么吗?


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