如何在macOS的黑暗模式下摆脱白色阴影?

时间:2020-07-26 10:34:53

标签: swift macos storyboard interface-builder swift5

我正在Swift中制作一个macOS应用,当我切换黑白亮和暗模式时,我看到一个奇怪的问题。在亮模式下,图像周围出现的阴影很好,但是在暗模式下默认情况下我得到的阴影看起来不太好。有谁知道如何解决这一问题?对于其他所有UI元素(如复选框,单选按钮等),我都得到了相同的结果。

Shadow in Dark Mode

不好

Shadow in Light Mode

注意:

  1. 此图像是通过Xcode中的界面生成器添加的。
  2. 我也未选中阴影复选框。见下文: Shadow Checkbox in IB

3 个答案:

答案 0 :(得分:1)

您可以尝试在NSView上实现viewDidChangeEffectiveAppearance(),也可以在NSApp.effectiveAppearance上进行键值观察。这样,您将收到有关明/暗模式之间外观变化的通知,以便您做出相应的反应。

答案 1 :(得分:1)

您可以检测视图是否为暗模式。在黑暗模式下,您可以隐藏阴影。

  1. NSView添加扩展名:
extension NSView {
    
    func isDarkMode() -> Bool {
        if #available(OSX 10.14, *) {
            return effectiveAppearance.bestMatch(from: [.darkAqua, .aqua]) == .darkAqua
        }
        return false
    }
}

  1. 创建自定义视图(视图,按钮等)。在您的自定义视图和更新层中覆盖viewDidChangeEffectiveAppearance方法。
class CustomView: NSView {
    
    override func viewDidChangeEffectiveAppearance() {
        // edit shadow's properties. ex: shadowOpacity.
        if isDarkMode() {
            // dark mode
        } else {
            // light mode
        }
    }
}

答案 2 :(得分:1)

确保视图的超级视图也没有定义阴影或背景不透明。

如果超级视图的背景不透明,则子视图也会有阴影。