Как реализовывалась поддержка светлой и темной темы (Dark Mode) в iOS?

«Как реализовывалась поддержка светлой и темной темы (Dark Mode) в iOS?» — вопрос из категории UIKit, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, реализовывал поддержку Dark Mode. Ключевой принцип — использование системных цветов и ассетов, которые автоматически адаптируются.

Основные подходы:

  1. Системные цвета (UIKit/SwiftUI):

    • UIColor.systemBackground (фон)
    • UIColor.label (основной текст)
    • UIColor.secondaryLabel (вторичный текст)
    • В SwiftUI: Color.primary, .background.
  2. Кастомные цвета в Asset Catalog:

    • Создание цвета с наборами для Any Appearance и Dark Appearance.
    • Обращение через UIColor(named: "MyColor") или Color("MyColor").
  3. Принудительная установка темы:

    // Для всего окна
    window?.overrideUserInterfaceStyle = .dark
    // Для конкретного VC
    overrideUserInterfaceStyle = .light

    Глобальная настройка в Info.plist (UIUserInterfaceStyle) не рекомендуется, так как лишает пользователя выбора.

  4. Реакция на смену темы в коде:

    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
        if traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
            updateCustomUIForCurrentTheme()
        }
    }

Важно: Тестировать контрастность и читаемость в обеих темах, особенно для кастомных элементов.