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 — 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.
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 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.
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.
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-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 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.
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.
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 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.
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.
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.
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ə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.
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if traitCollection.horizontalSizeClass == .Compact {
collectionView.collectionViewLayout = SingleColumnLayout()
} else {
collectionView.collectionViewLayout = DoubleColumnLayout()
}
}
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 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-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 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 — 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.
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 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.
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.
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ə
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.
Həm də oxuyun