如何在NSTextField上实现vibrancy活力通透效果
macOS下NSTextField实现vibrancy效果的正确步骤
前置检查
- 确认你已经通过Interface Builder添加的NSVisualEffectView参数配置正确:
material属性设置为你需要的材质(如.sidebar/.headerView等)blendingMode设置为.behindWindow(穿透窗口显示后方内容)或.withinWindow(仅和同窗口内后方视图混合)state设置为.active保证效果始终生效
核心实现步骤
- 先关闭NSTextField的默认背景、边框绘制,否则会直接覆盖vibrancy效果:
var varLabel = NSTextField() varLabel.stringValue = "Some" // 关闭背景、边框相关默认绘制 varLabel.isBezeled = false varLabel.isBordered = false varLabel.drawsBackground = false
- 开启文本的vibrancy支持,不需要单独指定vibrant系列外观,匹配父级NSVisualEffectView的外观即可自动适配深浅模式:
// 开启文本cell的vibrancy支持,这是效果生效的核心开关 varLabel.cell?.allowsVibrancy = true // 匹配视觉效果视图的外观,不需要手动指定.vibrantLight/.vibrantDark varLabel.appearance = NSVisualEffectView.appearance()
- 必须将NSTextField添加到NSVisualEffectView的子视图层级中,才能触发效果:
// visualEffectView为你通过IB添加的NSVisualEffectView实例,可通过连线获取 visualEffectView.addSubview(varLabel)
原实现未生效原因
- 未将NSTextField放入NSVisualEffectView的子视图层级
- 没有关闭NSTextField的背景绘制,默认背景遮挡了效果
- 单独设置
.vibrantLight外观但没有开启cell的vibrancy支持开关
内容的提问来源于stack exchange,提问作者Avi Rok
相关产品推荐
相关产品推荐

