В MacOS ошибки пользовательского интерфейса Mojave Dark Mode с NSPredicateEditor в листе - PullRequest
0 голосов
/ 17 ноября 2018

В приложении Mac я представляю лист, содержащий NSPredicateEditor:

parentViewController.presentAsSheet(predicateEditor)

Я создал пример проекта для этого поведения здесь:
https://github.com/pkamb/Feedback_NSPredicateEditor

В macOS10.14 Мохаве, это приводит к ряду ошибок пользовательского интерфейса:

  1. В темном режиме область содержимого NSPredicateEditor светлая и нечитаемая:

Dark Mode

В легком режиме фон элементов управления NSPredicateEditor не совпадает с фоном фона строки / суперпредставления.Обратите внимание на is фон и фон текстовых полей:

Light Mode

Как можно исправить эти представленные в листах ошибки NSPredicateEditor в Мохаве?

Отчеты об ошибках:

  • rdar: // 42789149 - NSPredicateEditor плохо работает в темном режиме на листе
  • rdar: // 46142171 - представлен NSPredicateEditorЛист полностью сломан в Dark Mode

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Apple ответила на мой отчет об ошибке и говорит, что это поведение было исправлено недавним обновлением Xcode.

Представленный Листом NSPredicateEditor полностью поврежден в Темном Режиме

рдар: // 46142171

Отношения с разработчиками Apple:

Чтобы исправить внешний вид темного режима, вы должны сбросить этот фоновый цвет scollview по умолчанию

Я:

Вы говорите, что было исправлено обновление для Mojave?

Фон прокрутки в прозрачном цвете был необходим для того, чтобы NSPredicateEditor мог работать в темном режиме.

Отношения с разработчиками Apple:

Нет, в Xcode вам нужно изменить цвет фона scollview на его По умолчанию (controlBackgroundColor)

Me:

Хорошо, теперь я вижу, что это поведение в основном нормально после переключения (назад) на controlBackgroundColor. или удаление моего clearColor исправления

Однако в прошлом это определенно НЕ работало с выбранным цветом. Можете ли вы предоставить какую-либо информацию о том, когда это было исправлено в OS X или Xcode?

Связи с разработчиками Apple:

Это было исправлено в Xcode

0 голосов
/ 17 ноября 2018

По умолчанию представление прародителя NSPredicateEditor должно быть NSScrollView:

Predicate Editor View Hierarchy

Если вы предоставите этому виду прокрутки прозрачный фон clearColor, основная проблема в Dark Mode будет по большей части устранена. Если вы оставите это альфа-изменение активным в легком режиме, редактор предикатов примет белый фон, а не серый вид фона по умолчанию.

Как Apple говорит , внесите это изменение в 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)
    }

}

Темный режим NSPredicateEditor по-прежнему имеет некоторые проблемы с пользовательским интерфейсом, а именно рамку серого фона каждого элемента управления.

Dark Mode after fix

Это исправление обсуждалось на подкасте Omni Show здесь:

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

...