Компилировать с Xcode 11.5

MacOS и iOS поддерживают светлый и темный режимы. Поэтому важно сделать нашу тему адаптируемой к темному и светлому режимам. SwiftUI имеет встроенную поддержку темного и светлого режимов.

Настройка адаптивных цветов:

Для этого мы собираемся использовать набор цветов xcassets по следующим причинам:

  • Набор цветов адаптируется к теме (светлый или темный), поэтому нет необходимости добавлять дополнительные варианты переключения в цветовом классе для переключения цветов по разным темам.
  • Набор цветов помогает визуализировать цвета сразу же. Это упрощает соотнесение цветов с дизайном, предоставленным дизайнером.
  • Набор цветов позволяет вводить цвета во всех форматах (например, RGB, 8-битный, шестнадцатеричный), поэтому нам не нужно устанавливать алгоритм преобразования. Xcode выполняет преобразование в плавающую точку.

Теперь мы адаптируем все эти цвета с расширением на Color, чтобы получить правильный интерфейс для использования этих цветов.

Карта в UIKit

Возможно, нам также понадобится использовать UIkit. Чтобы сопоставить эти цвета с UIColor. Добавьте метод преобразования, который преобразует класс Color в класс UIColor, или скопируйте вышеуказанные методы в расширение UIColor.

Матрица настроек:

Определите размер шрифта и отступы для класса. Мы также можем изменить шрифт и отступы с помощью UITraitCollection, но мы не будем делать этого здесь.

Настройка глобальной темы

  • Перейдите к делегату сцены и установите accentColor в корневой ContentView. Теперь нам не нужно указывать Color simple button, Stepper, Date Piker и т. Д. Чтобы узнать больше об accentColor, нажмите this.
  • Обновить внешний вид для представлений UIkit (некоторые представления SwiftUI используют представления UIkit внутри)

Установка шрифта и цветовой темы для текста

Мы создадим настраиваемый модификатор просмотра, чтобы обновить внешний вид текста и встроить его с расширением в метод просмотра.

Установка шрифта и цветовой темы для пользовательской кнопки

Мы повторим приведенное выше упражнение для Button.

Тематика тостов

Мы обновим базу фона тостов в соответствии с цветовой темой, которую мы добавили в пункте 1.

┼ Базовый код тоста взят из StackOverflow.

Использование:

Демо-проект