设置UIView透明度为0.5时如何让内部按钮保持完全不透明
原因说明
对UIView设置layer.opacity属性等价于设置视图的alpha属性,该透明度值会叠加作用于视图的所有子元素,最终子视图的渲染透明度 = 父视图透明度 × 子视图自身透明度,因此哪怕单独将子按钮的透明度设为1,最终渲染值依然是0.5,无法达到预期效果。
解决方案
不要直接修改父视图的整体透明度,改为仅给父视图的背景色设置透明度即可,父视图本身的透明度保持为1,子元素就不会受到透明度叠加影响。
Swift代码实现如下:
// 移除原来的整体透明度设置 // myView.layer.opacity = 0.5 // 仅给背景色添加半透明效果 myView.backgroundColor = UIColor.white.withAlphaComponent(0.5)
如果使用Storyboard/Interface Builder配置,直接选中对应的UIView,在背景色设置面板中调整背景色的不透明度滑块到50%即可,无需修改视图的Alpha属性。
补充:如果你的父视图上除了背景还有其他需要整体半透的元素,仅按钮需要保持不透明,可以将按钮从父视图中移出,调整视图层级使其与父视图平级,再将按钮的位置约束对齐到原来的父视图对应位置即可。
效果参考


内容的提问来源于stack exchange,提问作者Anvil
相关产品推荐
相关产品推荐

