Как установить темный режим для NSToolbar в приложении macOS Catalyst?

#ios #uikit #mac-catalyst #ios-darkmode #nstoolbar

#iOS #uikit #mac-catalyst #ios-темный режим #nstoolbar

Вопрос:

В моем приложении для iOS / macOS пользователь может выбирать между светлым и темным внешним видом.

Это делается путем установки overrideUserInterfaceStyle окна приложения, например

 window.overrideUserInterfaceStyle = .dark
 

Он отлично работает на iOS / iPadOS.

В macOS (Catalyst) приложение использует NSToolbar, который всегда отображается в режиме, выбранном в системных настройках, независимо от того, что установлено для переопределения пользовательского интерфейса окна (см. Скриншот).

Поскольку это не очень хорошее визуальное впечатление, я хотел бы знать, как я могу установить светлый / темный режим и для NSToolbar.

приложение в темном режиме с NSToolbar в светлом режиме

Ответ №1:

Добавьте UIUserInterfaceStyle значение Dark в Info.plist вашего приложения. Это приведет к переводу всего приложения в темный режим на iOS 13 и Mac Catalyst (вам не нужно устанавливать переопределение userinterfacestyle).

Документы: https://developer.apple.com/documentation/bundleresources/information_property_list/uiuserinterfacestyle

Комментарии:

1. Спасибо вам за это. Сэкономил мне кучу времени.

2. mr. оригинальное имя пользователя. ОТМЕТЬТЕ ЭТОТ ОТВЕТ ПРАВИЛЬНЫМ!

3. Спасибо, это ценный совет, но не решает проблему полностью, поскольку это «статическое» решение и не позволяет изменять внешний вид во время выполнения. Пожалуйста, ознакомьтесь с принятым ответом.

4. @iosdeveloper Вы правы, хотя я столкнулся с несколькими странными ошибками при использовании метода NSApplication (я не помню подробностей, но в основном было несколько кнопок панели инструментов и меню, которые не могли переключать стили). Но если это работает для вас, отлично!

Ответ №2:

Это можно сделать, добавив плагин macOS, который имеет доступ ко всему API AppKit. Инструкции можно найти здесь: Как получить доступ к API AppKit из приложений Mac Catalyst

Затем вы можете установить желаемый внешний вид там во время выполнения, например:

 NSApplication.shared.appearance = NSAppearance(named: .darkAqua)