macOS开发 - 黑暗模式的适配问题

我个人的苹果电脑从未在黑暗模式下用过,不太习惯。所以,做macOS开发时也没考虑过黑暗模式,原来老的App,就更不用说了,那时候还没有黑暗模式。

前2天提交了一个老App更新,被拒绝了,理由如下:

Design Preamble

We found that your app does not include the minimum standards required for an app to be approved for the App Store.

Specifically, the menu texts are visible in Dark Mode.

首先,这个拒绝的理由,我理解是:在黑暗下,menu 文字应该可见。

运行App后,设置为黑暗模式,发现一些按钮上文字看不见了。

检查原因是window的背景设置了一个纯gray的图片,当改变为黑暗模式后,这个背景图片同时改变颜色,造成按钮上的文字与这个背景图颜色几乎一样,所以,看不见了。

简单的处理办法:就是把背景图片去掉。这样修改当然是可行的,再次提交审核也通过了。

因为这次拒绝,把其他的App也检查了一下,不少都使用了背景图片,有些在黑暗模式下,还可以显现,有些就与这个老App一样,有些内容完全被变化效果影响了,或是完全看不见,或是文字颜色不好分辨,不改肯定是不行的。

但是,把所有的背景图片都去掉,也是不行的,毕竟与页面有关系。必须解决这个问题,越简单越好。

搜了一下,还真有一个非常简单的办法,比较圆满,苹果在推出黑暗模式时,也考虑到了这种情况,简单一个属性设置就解决问题。

在window的属性设置中,有一个Appearance属性,默认是:Inherited (System, Aqua),将其修改为:Aqua

这样,无论你在window上叠加了多少个NSView,都不会受到黑暗模式的影响了。

如果是Main.storyboard的App,也将其Appearance属性修改为Aqua就可以。

所有App中使用的window,都需要修改,叠加的子View可以不管。

以MainMenu.xib为例,说明浅色和黑暗模式下的加背景图片(纯gray图片)效果。

下图说明: NSButton的背景后,设置了一个NSImageView,为了看清楚,加了边框效果。NSImageView中先不放gray的图片,是空的。

macOS开发 - 黑暗模式的适配问题

运行后,浅色和黑暗模式下,显示效果都正常。

macOS开发 - 黑暗模式的适配问题

macOS开发 - 黑暗模式的适配问题

下图说明:将上面的NSImageView设置了一个gray图片作为背景,图片名称image01,图片与window的背景色几乎是一样的,但是在黑暗模式下,按钮的文字就看不见了。

macOS开发 - 黑暗模式的适配问题

浅色模式正常,但黑色模式就不行了,我的App就是这个原因被拒绝的。

macOS开发 - 黑暗模式的适配问题

macOS开发 - 黑暗模式的适配问题

将window的Appearance属性设置为Aqua后的效果,App的窗口本身不受黑暗模式的影响了。

默认属性:

macOS开发 - 黑暗模式的适配问题

修改后的属性设置:

macOS开发 - 黑暗模式的适配问题

最后看看在黑暗模式下的运行效果,完全不受黑暗模式的影响。

macOS开发 - 黑暗模式的适配问题

按照上面的方法,已经将所有可能受黑暗模式变化影响的App都修改了Window的属性,也算暂时解决了可能的问题。

今后,要考虑黑暗模式的运行效果,背景颜色与文字颜色要设置好。