Что такое протокол UIAppearance в UIKit?

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

Ответ

Протокол UIAppearance — это механизм в UIKit для централизованной настройки визуальных свойств элементов интерфейса во всем приложении или в определенных контейнерах.

Основное применение: Глобальное задание стилей (цвета, шрифты, тени) для всех экземпляров конкретного класса UI-компонентов.

Пример глобальной настройки:

// Установка стиля для ВСЕХ UINavigationBar в приложении
UINavigationBar.appearance().barTintColor = .systemBlue
UINavigationBar.appearance().tintColor = .white
UINavigationBar.appearance().titleTextAttributes = [
    .foregroundColor: UIColor.white,
    .font: UIFont.boldSystemFont(ofSize: 20)
]

Пример контекстной настройки:

// Настройка кнопок только внутри UINavigationBar
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).tintColor = .red

// Настройка кнопок только внутри UIToolbar
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UIToolbar.self]).tintColor = .green

Критические ограничения:

  1. Работает только со свойствами, помеченными в документации как UI_APPEARANCE_SELECTOR.
  2. Влияет только на экземпляры, созданные после применения настроек. Уже отображенные элементы не изменятся.
  3. Не подходит для динамической смены темы (светлая/тёмная) во время работы приложения. Для этой цели используйте traitCollectionDidChange или переход на SwiftUI. Рекомендация: Применяйте для базового брендинга приложения, а для сложной динамической стилизации создавайте кастомные подклассы или фабрики.