在NSWindow上应用NSAppearance后,NSTableView和NSButtons没有正确重绘

时间:2017-05-23 18:13:14

标签: macos cocoa nstableview nswindow nsbutton

我在NSTableView中有NSButtons,就像我的other question here一样。

我在"暗模式"之间实现了切换。和"正常模式"在NSWindowController的窗口上使用NSAppearance:

override public func windowDidLoad() {
    if darkModeOn {
        setDarkMode()   
    } else {
        setLightMode()  
    }
}

func setDarkMode() {
    window?.appearance = NSAppearance(named: NSAppearanceNameVibrantDark)
    window?.backgroundColor = nil
}

func setLightMode() {
    window?.appearance = nil
    window?.backgroundColor = .white
}

按钮的isTemplate属性为true,因此它们的颜色与窗口的颜色相反。

灯:

enter image description here

黑暗:

enter image description here

当应用程序启动时,此功能正常:当窗口为白色时按钮为黑色,当窗口为黑色时按钮为白色。

但是,当应用已经推出时,这不再适用。

应用程序启动后,如果我在窗口为白色时调用setDarkMode(),我会突然得到黑色或灰色按钮,而不是所需的白色按钮。

enter image description here

如果我在窗户黑暗时调用setLightMode(),则相同。

enter image description here

在这两种情况下,一旦我来回滚动tableView足以强制重绘单元格,按钮就会恢复正常。

注意切换窗口状态的另一个副作用:某些tableView的行分隔符突然变粗,并且在滚动后也会再次变为正常。 < / p>

您可以想象,我不希望用户被迫退出应用并重新启动,因此我希望在NSAppearance更改时在窗口中正确绘制所有这些内容。

不幸的是,我已经尝试了许多解决方案而没有成功:needsDisplay和其他强制方式的组合&#34;刷新&#34;按钮(和tableView行分隔符)没有任何效果。文档很稀疏。我观看了所有WWDC视频。我输了。 :P

0 个答案:

没有答案