【macOS】NSPopUpButton边框颜色解决方案

背景

  • 开发过程中需要自定义下拉框组件。
  • macOS上,模态弹窗下再弹出模态弹窗阻塞的问题,导致自定义下拉框组件以window的方式弹出来有问题。所以继续采用系统自带NSPopUpButton(非NSCombox组件,由于NSCombox无法自定义每行Item样式)。
  • 使用NSMenuItem自定义Item样式后,发现PopUpButton的非模态弹窗边框样式一直是系统颜色,可能达不到要求。

解决方案

在XCode上查看弹出window的contentView后,可以发现高版本系统(macOS 10.14及以上)contentView为NSVisualEffectView。查看文档后,发现可以通过调整属性以达到相应需求:

  1. 设置弹窗背景颜色为指定颜色:[self window].backgroundColor = [NSColor whiteColor];
  2. 将blendingMode设置NSVisualEffectBlendingModeWithinWindow。默认view与窗口颜色混合。这时颜色就有了变化。
  3. 在10.14及以上,设置NSVisualEffectView.material=NSVisualEffectMaterialSheet,可以混合为白色。在10.14以下,设置NSVisualEffectView.material=NSVisualEffectMaterialTitlebar,能比较好的达到白色效果。(这里只用白色做实验)
    实际测试时,要达到白色效果,这几个都是可以的:
白色:
NSVisualEffectMaterialLight
NSVisualEffectMaterialContentBackground
NSVisualEffectMaterialSheet
NSVisualEffectMaterialHeaderView

浅白色:
NSVisualEffectMaterialTitlebar
NSVisualEffectMaterialPopover
  1. 最后更新layer:[NSVisualEffectView updateLayer];
    上方和下方红框部分变为白色,而非系统颜色
    图 上方和下方红框部分变为白色,而非系统颜色
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值