如何摆脱 macOS 深色模式下的白色阴影?
How to get rid of the white shadow in dark mode in macOS?
我正在 Swift 中制作一个 macOS 应用程序,当我切换 b/w 明暗模式时发现一个奇怪的问题。在亮模式下图像周围出现的阴影很棒,但我在暗模式下默认获得的阴影看起来不太好。有谁知道如何解决这一问题?我对所有其他 UI 元素(如复选框、单选按钮等)也一样
Not nice
Nice
注:
- 此图像是通过 Xcode 中的界面生成器添加的。
- 我也取消选中了阴影复选框。见下文:
您可以尝试在 NSView
上实施 viewDidChangeEffectiveAppearance() 或在 NSApp.effectiveAppearance
上进行键值观察。这样,您将收到有关 light/dark 模式之间外观变化的通知,以便您做出相应的反应。
您可以检测视图是否为深色模式。并且在深色模式下隐藏阴影。
- 为
NSView
添加扩展名:
extension NSView {
func isDarkMode() -> Bool {
if #available(OSX 10.14, *) {
return effectiveAppearance.bestMatch(from: [.darkAqua, .aqua]) == .darkAqua
}
return false
}
}
- 创建自定义视图(视图、按钮等)。在您的自定义视图和更新图层中覆盖
viewDidChangeEffectiveAppearance
方法。
class CustomView: NSView {
override func viewDidChangeEffectiveAppearance() {
// edit shadow's properties. ex: shadowOpacity.
if isDarkMode() {
// dark mode
} else {
// light mode
}
}
}
确保你的视图的父视图没有定义阴影或者它有不透明的背景。
如果您的父视图没有不透明背景,子视图也会有阴影。
我正在 Swift 中制作一个 macOS 应用程序,当我切换 b/w 明暗模式时发现一个奇怪的问题。在亮模式下图像周围出现的阴影很棒,但我在暗模式下默认获得的阴影看起来不太好。有谁知道如何解决这一问题?我对所有其他 UI 元素(如复选框、单选按钮等)也一样
Not nice
Nice
注:
- 此图像是通过 Xcode 中的界面生成器添加的。
- 我也取消选中了阴影复选框。见下文:
您可以尝试在 NSView
上实施 viewDidChangeEffectiveAppearance() 或在 NSApp.effectiveAppearance
上进行键值观察。这样,您将收到有关 light/dark 模式之间外观变化的通知,以便您做出相应的反应。
您可以检测视图是否为深色模式。并且在深色模式下隐藏阴影。
- 为
NSView
添加扩展名:
extension NSView {
func isDarkMode() -> Bool {
if #available(OSX 10.14, *) {
return effectiveAppearance.bestMatch(from: [.darkAqua, .aqua]) == .darkAqua
}
return false
}
}
- 创建自定义视图(视图、按钮等)。在您的自定义视图和更新图层中覆盖
viewDidChangeEffectiveAppearance
方法。
class CustomView: NSView {
override func viewDidChangeEffectiveAppearance() {
// edit shadow's properties. ex: shadowOpacity.
if isDarkMode() {
// dark mode
} else {
// light mode
}
}
}
确保你的视图的父视图没有定义阴影或者它有不透明的背景。
如果您的父视图没有不透明背景,子视图也会有阴影。