Что такое size class? Какие они бывают? Для чего их используют?ios-83

Что это?

Size Classes (классы размеров) — это система классификации доступного пространства на экране по горизонтали и вертикали, используемая для создания адаптивных интерфейсов. Они представляют собой абстракцию над физическими размерами устройств.

Какие бывают?

Существует два типа Size Classes, каждый с двумя вариантами:

1. Горизонтальный

  • Compact (Компактный): Узкое пространство (iPhone в портретной ориентации)
  • Regular (Регулярный): Широкое пространство (iPad, iPhone в ландшафте)

2. Вертикальный

  • Compact (Компактный): Низкое пространство (iPhone в ландшафте)
  • Regular (Регулярный): Высокое пространство (iPhone в портрете)

Комбинации на практике:

УстройствоОриентацияГоризонтальныйВертикальный
iPhone (кроме Max) Портретная Compact Regular
iPhone (кроме Max) Ландшафтная Compact Compact
iPhone Max Ландшафтная Regular Compact
iPad Любая Regular Regular

Для чего используют?

  1. Адаптивные интерфейсы:

    • Разные макеты для разных устройств
    • Переключение между компактным и регулярным режимами
  2. Универсальные storyboards:

    • Один интерфейс для всех устройств
    • Настройка constraints и видимости элементов
// Пример проверки size class в коде
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)

    if traitCollection.horizontalSizeClass == .compact {
        // Настройка для компактного режима
    } else {
        // Настройка для регулярного режима
    }
}
  1. Кастомизация контроллеров:
    • Разное поведение на iPhone и iPad
    • Адаптация split-view контроллеров

Как работать с Size Classes?

В Interface Builder:

  1. Установка различных constraints для разных size classes
  2. Настройка видимости элементов
  3. Разные шрифты или изображения
// Пример программной адаптации
func setupViews() {
    if traitCollection.verticalSizeClass == .compact {
        stackView.axis = .horizontal
    } else {
        stackView.axis = .vertical
    }
}

Особые случаи:

  1. Split View на iPad:
    • При изменении размера окна меняются size classes
  2. Мультиоконный режим:
    • Динамическое изменение при ресайзе
  3. iPhone Plus/Max в ландшафте:
    • Регулярная горизонтальная size class

Современные подходы

  1. UIViewPropertyAnimator для плавных переходов
  2. UIContentSizeCategory для адаптации к размерам шрифта
  3. UITraitCollection для кастомных адаптаций
// Реакция на изменение size class
override func willTransition(to newCollection: UITraitCollection,
                           with coordinator: UIViewControllerTransitionCoordinator) {
    super.willTransition(to: newCollection, with: coordinator)

    coordinator.animate(alongsideTransition: { _ in
        self.updateLayout(for: newCollection)
    })
}

Резюмируем:

Size Classes — это мощная система для создания адаптивных интерфейсов, позволяющая единообразно работать с разными размерами экранов и ориентациями устройств. Они абстрагируют физические размеры устройств, фокусируясь на доступном пространстве для контента, что особенно важно в эпоху разнообразных iOS-устройств и многозадачности на iPad.