如何观察 AppKit 中系统偏好“侧边栏图标大小”的变化?

问题描述

在 macOS 系统偏好设置的主要部分,用户可以更改“侧边栏图标大小”。当有问题的 NSOutlineView 的大小模式设置为 default 时,此设置会更改侧边栏中使用的图标大小(并且因为 macOS 11 还会更改字体大小)。

我想在我的应用程序中添加一个 UserNotification 观察者来跟踪对所述设置的更改,因此我可以在每次大小更改后执行一些额外的微调,但找不到任何适用的 NSNotification.Name 或其他常数。

欢迎任何可行的解决方案或建议。

解决方法

我知道我有一个解决方案,但我正在寻找错误的项目。这是我发现的。观察 UserDefaults 不是一个很好的选择,但至少它有效:

fileprivate let tableViewDefaultSizeModeKey = "NSTableViewDefaultSizeMode"

override func viewDidLoad() {
    super.viewDidLoad()
    UserDefaults.standard.addObserver(self,forKeyPath: tableViewDefaultSizeModeKey,options: .new,context: nil)
}

override func observeValue(forKeyPath keyPath: String?,of object: Any?,change: [NSKeyValueChangeKey : Any]?,context: UnsafeMutableRawPointer?) {
    if keyPath == tableViewDefaultSizeModeKey {
        // Do whatever is needed
    }
}