问题标签 [macos-darkmode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swift - Swift 命令行工具未接收 DistributedNotificationCenter 通知
我正在尝试创建一个非常基本的 Swift 命令行应用程序,当 macOS UI 更改为/从亮/暗模式时,该应用程序使用 WebSocket 向另一个应用程序发出信号。
出于某种原因,命令行工具没有收到来自 的任何通知DistributedNotificationCenter
,尤其是AppleInterfaceThemeChangedNotification
. 但是,在 Cocoa UI 应用程序中运行完全相同的代码applicationDidFinishLaunching
可以正常工作。
我在 Github 上找到了一个旧的 Obj-C CLI 项目,该项目旨在打印出每个通知,但这也无济于事。这让我怀疑苹果可能改变了一些东西,但我似乎在网上找不到任何关于它的东西。我需要设置某些 Xcode 项目设置吗?
swift - 切换到深色模式时 PDFView 的有效外观未更新
PDFKit 的 PDFView 似乎与暗模式不兼容。当用户切换到暗模式时,它effectiveAppearance
不会更新。
有什么理由吗?有什么优雅的解决方法可以用暗模式更改 PDFView 的背景颜色吗?
css - SVG 暗模式样式在 Safari 中不起作用
网站正文暗模式样式在 Chrome 和 Safari 上都适用于我的 CSS 变量和prefers-color-scheme
.
但是标志有不同的情况。我在其中设置了外部 .svg 样式,并使用了深色模式和浅色模式的样式,这非常适合 Chrome。但在 macOS 和 iOS Safari 上,它不会改变它的颜色。
可能的解决方案是什么?
谢谢
xcode - NSAppearanceNameAqua 在暗模式和亮模式下都返回
我在 Qt for mac 中有一个应用程序,升级到 XCode 11.4 后,我的应用程序没有切换到暗模式。
我检查了我的代码,我意识到 NSAppearance 名称在明暗模式下都是 NSAppearanceNameAqua。
我尝试了以下两种方法:
还有其他人面临同样的问题吗?
objective-c - 从命令行编译时将 SDK 版本写入二进制文件 (macOS)
我正在尝试检测系统是否处于暗模式。我已经尝试AppleInterfaceStyle
从用户默认值中读取,即
这在大多数情况下都有效,但Auto
在 Catalina 模式下存在问题。
现在从我所读到的是,更强大的方法是检查effectiveAppearance
其中NSApplication
看起来像这样的:
这种方法的问题是我正在为其编写的应用程序手动设置其appearance
属性,这会阻止effectiveAppearance
使用系统外观。app.appearance = nil
我在检查之前尝试了设置,effectiveAppearance
但没有帮助。
现在还有[NSAppearance currentAppearance]
哪个使用当前线程的外观。如果线程没有明确设置该值,我不太确定该值解析为什么。
我的大问题是我无法访问运行 macOS 的机器来检查我的代码,所以如果有人知道在这里做什么,我将不胜感激。
编辑:看起来问题是该库没有针对正确版本的 SDK 进行编译。或者至少该版本没有写入库信息。
从文档中:
如果您针对较早的 SDK 构建您的应用程序,但仍希望支持暗模式,请在您的应用程序的 Info.plist 文件中包含 NSRequiresAquaSystemAppearance 键(值为 NO)。仅当您的应用在 macOS 10.14 及更高版本中运行并启用暗模式时看起来正确时才这样做。
我已经通过-mmacosx-version-min=10.14
. 根据我的发现,这个问题与我的问题基本相同,但我不太明白提交中的解决方案是什么。
我想这与-isysroot
and有关系-platform_version
。但是我没有找到任何关于他们做什么以及他们如何工作的好的参考。
我更新的问题是:
如何使用它们-isysroot
以及-platform_version
如何使用它们在我的二进制文件中启用 SDK 特定功能?
macos - 切换暗模式时 NSAppearance 不更新
我有一个仅在 macOS 状态栏中运行的 macOS 应用程序。我将 Info.plist 中的“Application is agent (UIElement)”属性更改为“YES”:
我有一个计时器,它每 5 秒打印一次外观的名称,如下所示:
问题
当我在系统设置中切换暗/亮模式时,名称实际上并没有改变。它总是打印应用程序启动时设置的外观名称。
有没有办法听系统外观变化?
目标
我的最终目标实际上是将 an 绘制NSAttributedString
到 an 上NSImage
,并将其NSImage
用作NSStatusItem
按钮的图像。
对于我使用的属性字符串中的文本UIColor.labelColor
,它应该基于系统外观。但是,它似乎不尊重系统外观的变化。
当我在深色模式下启动应用程序然后切换到浅色模式时:
当我在 Light Mode 下启动应用程序然后切换到 Dark Mode 时:
边注
我将 theNSAttributedString
变成 anNSImage
并且不NSAttributedString
直接在NSStatusItem
按钮上使用的attributedTitle
原因是因为它在状态栏中的位置不正确。
uikit - 如何检测 macOS(Objective-C)中的“可访问性降低透明度”?
默认情况下,macOS11.0 Big Sur 在 Accessibility 上将“降低透明度”设置为 true。这使得浅色状态菜单与深色菜单几乎相同,从而使我的应用程序状态菜单栏图标的设置成为一项挑战。
在 iOS 上,一个简单的 UIKit 函数就可以解决问题:
但是没有办法在 macOS 上实现它,尽管 Apple 文档指出可用性是 iOS 8.0+ 和 macOS Catalyst 13.0+
有任何想法吗?谢谢!
javascript - 是否可以使用 JavaScript 在页面上的亮模式和暗模式之间切换?
我可以用
或者
检测它是否是操作系统的暗模式。
但是,有什么方法可以让我自己使用 JavaScript 修改状态?这样我就可以创建一个按钮,让用户在不想保留操作系统设置的情况下在明暗之间切换。