0705 - 说说 NSPopover 的一个坑

今天开发 iTips,遇到一个很诡异的问题:NSOutlineView 中的 NSTableCellView 中的 NSTextField,始终有一个背景色,无论怎么设置都无法去掉。如下图中左侧部分所示:

关键的,相同的代码在另一个项目中,则没有问题,奇了怪了。

Google 了快一个小时,最后终于在 GitHub 的一个项目的一个 Issue 的一个评论里,有人说了一点,才 终于知道为什么:NSPopover 默认使用 NSAppearanceNameVibrantLight 这种样式,因此带来问题:NSTextField 使用透明背景色,进而就会取 NSPopover 中的背景色,就是图中的问题。

解决方案:只要将 NSPopover 的主题改为 NSAppearanceNameAqua 即可:

self.view.appearance = NSAppearance(named: NSAppearanceNameAqua)

知道原因后,改是容易的。关键的,很难知道这个原因,这是你翻遍 Apple 技术文档第一页,都找不到答案的问题。好在解决了,不然真的是闹心。