Swift:父视图alpha为0.5时如何让子UIView不透明
解决父视图设置alpha后子视图保持不透明的问题
嘿,这个坑我之前踩过!你遇到的问题是UIKit的一个特性——父视图的alpha属性会统一作用于它所有的子视图,哪怕你给子视图单独设了alpha=1.0,也会被父视图的alpha值“稀释”,所以子视图还是会呈现半透明状态。
给你两个实用的解决办法:
方法一:给父视图背景色设置透明度(推荐)
不要直接给父视图设置alpha,而是给它的背景色添加透明度。这样父视图的背景是半透明的,但子视图完全不受影响:
// Background let popUpBackground = UIView(frame: self.view.frame) // 给背景色添加alpha,而非给视图本身设置alpha popUpBackground.backgroundColor = UIColor.lightGray.withAlphaComponent(0.5) // 视图默认alpha为1.0,无需额外设置 // Popup let popUp = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) popUp.backgroundColor = UIColor.blue // 子视图保持alpha=1.0即可,不会被父视图影响 popUpBackground.addSubview(popUp) self.view.addSubview(popUpBackground)
方法二:将父视图和子视图设为同级视图
如果你的父视图除了背景还有其他需要半透明的内容,那可以把父视图和弹窗视图都加到同一个容器里,让它们成为同级,这样父视图的alpha就不会影响弹窗了:
// 创建一个容器视图作为载体 let containerView = UIView(frame: self.view.frame) self.view.addSubview(containerView) // Background(作为容器的子视图) let popUpBackground = UIView(frame: containerView.bounds) popUpBackground.backgroundColor = UIColor.lightGray popUpBackground.alpha = 0.5 containerView.addSubview(popUpBackground) // Popup(同样作为容器的子视图,和背景同级) let popUp = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) popUp.backgroundColor = UIColor.blue popUp.alpha = 1.0 containerView.addSubview(popUp)
这样弹窗就能保持完全不透明,而背景还是半透明的状态啦!
内容的提问来源于stack exchange,提问作者johnDoe
相关产品推荐
相关产品推荐

