首页 文章

macOS Mojave Dark Mode UI在工作表中使用NSPredicateEditor进行错误

提问于
浏览
0

在Mac应用程序中,我将展示一个包含NSPredicateEditor的工作表:

let predicateEditorSheet = // from storyboard
parentViewController.presentAsSheet(predicateEditorSheet)

在macOS 10.14 Mojave中,这会导致许多UI错误:

  • 在暗模式下,NSPredicateEditor内容区域很轻且不可读:

Dark Mode

  • 在灯光模式下,NSPredicateEditor控件的背景与行/超级视图的背景背景不匹配 . 注意 is 背景和文本字段的背景:

Light Mode

如何在Mojave中修复这些表单呈现的NSPredicateEditor错误?

错误报告:

  • rdar:// 42789149 - NSPredicateEditor在工作表中的暗模式下表现不佳

  • rdar:// 46142171 - 由Sheet呈现的NSPredicateEditor在暗模式下完全被破坏

1 回答

  • 1

    默认情况下,NSPredicateEditor的祖父视图应该是NSScrollView:

    Predicate Editor View Hierarchy

    如果您为此滚动视图提供clearColor透明背景,则主要的暗模式问题将基本固定 . 如果在“光照模式”下保持此Alpha变化处于活动状态,则谓词编辑器将采用白色背景而不是默认的灰色视图背景 .

    As Apple says,在 layout() 或其他一种方法中进行此更改,使您的视图在系统外观更改时有机会自行更新 .

    class NSPredicateEditorDarkModeFix: NSPredicateEditor {
    
        override func layout() {
            defer { super.layout() }
    
            guard let clipView = self.superview as? NSClipView, let scrollView = clipView.superview as? NSScrollView else {
                return
            }
    
            let alpha: CGFloat = NSAppearance.current.name == .darkAqua ? 0.0 : 1.0
            scrollView.backgroundColor = scrollView.backgroundColor.withAlphaComponent(alpha)
        }
    
    }
    

    Dark Mode NSPredicateEditor仍然会出现一些UI问题,即每个控件的灰色背景帧 .

    Dark Mode after fix

    此修复程序在Omni Show播客上进行了讨论:

    https://theomnishow.omnigroup.com/episode/rey-worthington-omnigraffle-engineer https://twitter.com/theomnishow/status/1052630270719868928

相关问题