Size Class: nədir, Compact və Regular ölçü sinifləri iOS-da

Müəllif: IT Sectr Dərc olunub: 2026-06-08 Oxuma vaxtı: 8 dəq

Size Class — iOS-da adaptiv layout üçün mexanizmdir, bütün cihazları hər ox üzrə iki kateqoriyaya ayırır: Compact (dar/qısa) və Regular (geniş/uzun). Bu dəyərlərin kombinasiyaları interfeysin iPhone, iPad, Mac Catalyst və CarPlay-də necə göstərildiyini müəyyən edir. Apple Human Interface Guidelines, 2024-ə əsasən, Size Class Auto Layout və UITraitCollection istifadə edərək bütün cihazlar üçün bir storyboard qurmağa imkan verir. Sistem iOS 8-dən başlayaraq bütün iOS cihazlarında işləyir.

Əsas məqamlar

  • Size Class — iOS-da hər ox üçün iki dəyərə malik ölçü təsnifat sistemi: Compact (sıxılmış) və Regular (tam ölçülü).
  • Üfüqi Size Class iPhone-da portret oriyentasiyada — Compact, iPad-da — Regular. Şaquli — SE istisna olmaqla bütün iPhone-larda Regular.
  • UITraitCollection — cari Size Class-ı əldə etmək və trait collection dəyişikliklərinə reaksiya vermək üçün proqram interfeysi.
  • Interface Builder Vary for Traits aləti ilə hər Size Class kombinasiyası üçün constraint-lər və element görünürlüyünü konfiqurasiya etməyə imkan verir.
  • Size Class əsasında adaptiv layout iPhone və iPad üçün ayrı storyboard-ları əvəz edir — bir fayl bütün cihazlara uyğunlaşır.

Size Class nədir?

Size Class — Apple tərəfindən iOS 8-də adaptiv layout-u birləşdirmək üçün tətbiq edilmiş iOS ekranının abstrakt təsnifatıdır. Cihazın konkret modelini yoxlamaq əvəzinə, Size Class iki xarakteristikanı müəyyən edir: üfüqi və şaquli mövcud yer. Hər xarakteristika iki dəyərdən birini alır — Compact (məhdud yer) və ya Regular (kafi yer). Bu dəyərlərin kombinasiyası trait collection yaradır, interfeysin bütün elementlərinə ötürülür.

Tarix və məqsəd

Size Class meydana çıxmamışdan əvvəl proqramçılar iPhone və iPad üçün ayrı storyboard-lar yaradırdı və ya kodda UI_USER_INTERFACE_IDIOM() yoxlamalarından istifadə edirdi. Bu kod təkrarlanmasına, storyboard-ların şişməsinə və yeni ekran ölçülərini dəstəkləməkdə çətinliklərə səbəb olurdu. Size Class universal sistem təklif edərək problemi həll etdi: proqramçı interfeysi 4 Compact/Regular kombinasiyası üçün konfiqurasiya edir və iOS avtomatik olaraq uyğun olanı seçir. iPad-də Split View və müxtəlif iPhone ölçülərinin meydana çıxması ilə sistem adaptiv layout üçün əvəzolunmaz hala gəldi.

Size Class necə işləyir

Size Class iOS tərəfindən cari ekranın eni və hündürlüyü əsasında, oriyentasiya və multitasking nəzərə alınmaqla hesablanır. Dəyərlər konkret piksellərə bağlı deyil — bu məntiqi kateqoriyadır. Məsələn, iPhone 16 Pro portretdə üfüqi Compact və şaquli Regular-a malikdir. Eyni iPhone landşaftda — hər iki oxda Compact-dır. Split View-də 1/3 ekranı tutan tətbiq üfüqi Compact alır, tam ekran rejimində isə Regular. Sistem oriyentasiya və ya Split View dəyişdikdə Size Class-ı avtomatik yeniləyir.

Hansı ölçü sinifləri var

Size Class iki oxda iki dəyərin dörd kombinasiyasından istifadə edir. Hər kombinasiya cihaz növündən və oriyentasiyasından asılı olaraq öz tətbiqinə malikdir. Bu kombinasiyaları başa düşmək iOS üçün adaptiv interfeys dizaynının əsasıdır. Sistem bütün aktual Apple cihazlarını əhatə edir: iPhone, iPad, Mac Catalyst və CarPlay. Apple wAny hAny kombinasiyasından (əsas layout) başlamağı və konkret kombinasiyalar üçün dəqiqləşdirməyi tövsiyə edir.

Dörd Size Class kombinasiyası

wCompact hRegular — portret iPhone (bəzi hallarda Plus/Max istisna olmaqla). wCompact hCompact — landşaft iPhone SE/6/7/8. wRegular hRegular — tam ekran iPad istənilən oriyentasiyada, iPhone Plus/Max landşaftda. wRegular hCompact — dar məzmunlu landşaft iPad. Hər kombinasiya hansı constraint-lər və elementlərin aktiv olduğunu müəyyən edir. Proqramçı Interface Builder-da hər kombinasiya üçün ayrıca görünüş təyin edə bilər.

Mac Catalyst üçün Size Class

Mac Catalyst-də Size Class həmişə wRegular hRegular — tam ölçülü interfeysdir. Bu o deməkdir ki, iPad tətbiqinin Mac versiyası maksimum yer alır. Proqramçı Mac-ı iPad-dən fərqləndirmək üçün UIScreen.traitCollection.userInterfaceIdiom vasitəsilə əlavə yoxlamalardan istifadə edə bilər. Mac-də Size Class stabil işləyir, lakin Catalyst tətbiqləri çox vaxt Size Class çərçivəsindən kənara çıxan siçan və klaviatura adaptasiyası tələb edir.

Size Class adaptiv layout-a necə təsir edir

Size Class hansı Auto Layout constraint-lərinin aktiv olduğunu, hansı interfeys elementlərinin göründüyünü və subview-ların necə yerləşdiyini müəyyən edir. Proqramçı müxtəlif Size Class-lar üçün fərqli constraint-lər təyin edə bilər və iOS trait collection dəyişdikdə onları avtomatik dəyişir. Məsələn, iPad-də (wRegular hRegular) cədvəl detallarla Master-Detail-də göstərilir, iPhone-da (wCompact hRegular) — Navigation Stack-də. Bu Size Class ilə adaptiv layout-un əsas ssenarisidir.

Constraint-lərin qurulması və silinməsi

Interface Builder-da proqramçı Vary for Traits düyməsi ilə Size Class kombinasiyasını seçir və yalnız bu kombinasiya üçün işləməli olan constraint-lər əlavə edir. wAny hAny üçün qurulan constraint-lər həmişə işləyir. Konkret kombinasiya üçün qurulan constraint-lər yalnız Size Class uyğun gəldikdə aktivləşir. Kombinasiya üçün xüsusi constraint-lər təyin edilməyibsə, əsas constraint-lər istifadə olunur. Size Class dəyişdikdə iOS constraint dəstləri arasında keçidi animasiya edir.

Elementlərin gizlədilməsi və göstərilməsi

Installed bayrağı Interface Builder-da müəyyən Size Class-lar üçün elementləri gizlətməyə imkan verir. Proqramçı elementi seçilmiş kombinasiya üçün Uninstalled olaraq qeyd edir. Məsələn, Details düyməsi yalnız iPad-də (wRegular hRegular) görünür, iPhone-da isə gizlidir. Bu kodda isHidden idarə etməkdən daha sadədir. Proqramlı gizlətmə üçün traitCollectionDidChange-in override edilməsi və ya willTransition metodundan istifadə olunur, burada cari Size Class yoxlanılır.

Interface Builder-da Size Class istifadəsi

Interface Builder Size Class ilə işləmək üçün Vary for Traits vizual alətini təqdim edir. Proqramçı lazımi kombinasiyanı (en və hündürlük) seçir və Interface Builder bu kombinasiya üçün ekran ön baxışını göstərir. Bu rejimdə edilən bütün constraint, ölçü, şrift və görünürlük dəyişiklikləri yalnız seçilmiş Size Class-a tətbiq olunur. Rejimdən çıxmaq parametrləri təsbit edir. Bu yanaşma müxtəlif cihazlar üçün adaptasiya kodu yazmaq ehtiyacını aradan qaldırır.

Interface Builder-da addım-addım iş

Size Class-ın konfiqurasiyası üçün Interface Builder-da proqramçı storyboard-u açır, view controller-i seçir və alt paneldə Vary for Traits düyməsini sıxır. Sonra Width (Compact, Regular və ya Any) və Height (Compact, Regular və ya Any) seçir. İnterfeys seçilmiş kombinasiya üçün redaktə rejiminə keçir. Bütün constraint dəyişiklikləri, elementlərin əlavə edilməsi və ya silinməsi yalnız bu kombinasiyaya tətbiq olunur. Konfiqurasiya bitdikdən sonra proqramçı rejimdən çıxır — dəyişikliklər konkret Size Class kombinasiyası üçün saxlanılır.

Ən yaxşı təcrübələr

Apple wAny hAny üçün əsas layout-dan başlamağı (bütün cihazları əhatə edən əsas kombinasiya) tövsiyə edir. Sonra problemli kombinasiyalar üçün layout-u dəqiqləşdirin: wCompact hRegular (portret iPhone) və wRegular hRegular (iPad). Hər kombinasiyanı konfiqurasiya etmək tövsiyə edilmir — yalnız layout-un pozulduğu yerlərdə. Həddindən artıq konfiqurasiya dəstəyi çətinləşdirir. Şriftlərin dəqiq konfiqurasiyası üçün Size Class əvəzinə Dynamic Type istifadə edin: şriftlər avtomatik olaraq ekran ölçüsünə uyğunlaşır.

Kodda Size Class: UITraitCollection

UITraitCollection — cari Size Class və digər mühit xarakteristikalarını (force touch, display scale, user interface idiom) ehtiva edən iOS sinfidir. Hər UIView və UIViewController valideyndən miras alınan öz traitCollection-a malikdir. Proqramçı Size Class-ı traitCollection.horizontalSizeClass və traitCollection.verticalSizeClass vasitəsilə əldə edir, onlar UIUserInterfaceSizeClass (.compact, .regular və ya .unspecified) qaytarır. Size Class dəyişikliyi traitCollectionDidChange-in override edilməsi ilə izlənilir.

Nümunə: layout-un kodda dəyişdirilməsi

Nümunəni nəzərdən keçirək: UICollectionView layout-un Size Class-a uyğunlaşdırılması. iPad-də (wRegular hRegular) iki sütunlu UICollectionViewCompositionalLayout istifadə edirik, iPhone-da (wCompact hRegular) — bir sütunlu. Kod üfüqi Size Class-ı yoxlayır və müvafiq layout-u seçir. Fırlanma və ya Split View-ə keçid zamanı iOS traitCollectionDidChange-i çağırır və controller layout-u animasiya ilə dəyişir.

swift
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)
    if traitCollection.horizontalSizeClass == .Compact {
        collectionView.collectionViewLayout = SingleColumnLayout()
    } else {
        collectionView.collectionViewLayout = DoubleColumnLayout()
    }
}

Trait collection dəyişikliklərinə reaksiya

traitCollectionDidChange metodu Size Class-ın hər dəyişməsində çağırılır: cihazın fırlanması, Split View-ə giriş/çıxış, xarici displeyin qoşulması. Bu metodda proqramçı layout-u yeniləyir, kolleksiyaları yenidən yükləyir, constraint prioritetlərini dəyişir və ya element görünürlüyünü tənzimləyir. Məhz Size Class-ın dəyişib-dəyişmədiyini yoxlamaq vacibdir, başqa xarakteristika deyil: traitCollection.horizontalSizeClass-ı previousTraitCollection?.horizontalSizeClass ilə müqayisə edin. Optimizasiya force touch və ya display scale dəyişdikdə lazımsız yenidən çəkmələrin qarşısını alır.

Müxtəlif cihazlarda Size Class xüsusiyyətləri

Müxtəlif Apple cihazları müxtəlif Size Class kombinasiyalarına malikdir və proqramçı bu xüsusiyyətləri nəzərə almalıdır. iPhone portretdə — wCompact hRegular, landşaftda — modeldən asılıdır: iPhone SE/6/7/8 (wCompact hCompact), iPhone X və daha yeniləri (wCompact hCompact və ya məzmundan asılı olaraq wCompact hRegular). Tam ekran rejimində iPad — wRegular hRegular, Split View-də — wCompact hRegular (1/3 ekran) və ya wRegular hRegular (2/3 ekran) ola bilər. Mac Catalyst — həmişə wRegular hRegular.

iPhone: bütün ölçülər

iPhone-da Size Class əksər modellər üçün sabitdir, lakin nüanslar var. iPhone Plus (6+, 7+, 8+) və Max (X, XS, 11 Pro, 13–16 Pro Max) landşaftda wRegular hCompact-a malikdir — iPad mini kimi. Bu, böyük iPhone-larda landşaftda məzmunu iki sütunda yerləşdirməyə imkan verir. iPhone SE (1–3 nəsil) landşaftda — wCompact hCompact. Portretdə bütün iPhone-larda şaquli Size Class — Regular, landşaftda iPhone SE istisna olmaqla. Üfüqi — portret və landşaft üçün həmişə Compact (landşaftda Plus/Max istisna olmaqla).

iPad və Split View

iPad tam ekran rejimində — wRegular hRegular, layout-a maksimum elastiklik verir. Split View-də davranış dəyişir: tətbiq 1/3 ekranı tutursa (Slide Over və ya 1/3-də Split), üfüqi Size Class Compact olur, şaquli isə Regular qalır. 2/3 ekranda — wRegular hRegular. Proqramçı interfeysi Split View-in bütün rejimlərində test etməlidir, çünki Size Class dinamik dəyişir. Apple iPad-də ardıcıl davranış üçün Size Class-ı UISplitViewController ilə birlikdə istifadə etməyi tövsiyə edir.

Tez-tez verilən suallar

Size Class CSS-dəki breakpoint-dən nə ilə fərqlənir?

Size Class — 4 kombinasiyalı diskret sistemdir, CSS-breakpoint-lər isə ixtiyari sayda nöqtələri olan fasiləsiz sistemdir. Size Class cihazları davranışa görə qruplaşdıraraq konkret ekran ölçülərindən abstraksiya edir. CSS-breakpoint-lər piksellərə bağlıdır, Size Class — Compact/Regular məntiqi kateqoriyalarına.

Niyə iPhone Plus landşaftda Size Class üfüqi Regular-dır?

iPhone Plus/Max landşaftda məzmunu iki sütunda göstərmək üçün kifayət ekran genişliyinə malikdir (iPad mini kimi). Apple proqramçının əlavə yoxlamalar olmadan multi-column layout istifadə edə bilməsi üçün üfüqi Regular təyin edir. Bu iPhone üçün Compact qaydasından istisnadır.

Size Class-ı proqramlı olaraq dəyişmək mümkündürmü?

Size Class iOS tərəfindən cihazın real xarakteristikaları əsasında müəyyən edilir və tətbiq kodundan dəyişdirilə bilməz. Proqramçı yalnız cari dəyərə reaksiya verə bilər. Sistem UI sistemi elementləri üçün Size Class-ı ləğv edə bilər, lakin tətbiqdə bu mümkün deyil.

Size Class SwiftUI ilə necə işləyir?

SwiftUI Size Class-dan birbaşa istifadə etmir — bunun əvəzinə proqramçı cari dəyəri oxumaq üçün @Environment(\.horizontalSizeClass) modifikatorlarını tətbiq edir. SwiftUI daha yüksək səviyyəli alətlər təklif edir: Size Classes və Layout protokolu ilə AnyLayout adaptiv layout üçün.

Xarici monitor qoşulduqda Size Class yenilənirmi?

Bəli, Stage Manager və ya Sidecar vasitəsilə xarici displey qoşulduqda iOS Size Class-ı yeniləyir. Xarici monitor adətən wRegular hRegular alır, əsas ekran isə öz Size Class-ını saxlayır. traitCollectionDidChange hər ekranda pəncərələr üçün müstəqil çağırılır.

Nəticə

  • Size Class — hər oxda iki Compact/Regular dəyəri olan iOS ekran təsnifat sistemi, cəmi 4 kombinasiya.
  • iPhone portretdə — wCompact hRegular. Tam ekran rejimində iPad — wRegular hRegular. iPhone Plus/Max landşaftda — wRegular hCompact.
  • Interface Builder hər Size Class üçün constraint və görünürlüyün vizual konfiqurasiyası üçün Vary for Traits təqdim edir.
  • UITraitCollection — horizontalSizeClass və verticalSizeClass vasitəsilə Size Class oxumaq üçün proqram API-si. Dəyişikliklər traitCollectionDidChange-də izlənilir.
  • iPad-də Split View Size Class-ı dinamik dəyişir: 1/3 ekranda üfüqi Compact olur, layout adaptasiyası tələb edir.
  • SwiftUI Size Class oxumaq üçün @Environment(\.horizontalSizeClass) və icra zamanı layout-lar arasında keçid üçün AnyLayout təqdim edir.
  • Tövsiyə olunur wAny hAny üçün layout-dan başlamaq, sonra wCompact hRegular (iPhone) və wRegular hRegular (iPad) üçün adaptasiya etmək, qalan kombinasiyaları yükləməmək.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun