Size Class — iOS dagi adaptiv maket uchun mexanizm bo'lib, barcha qurilmalarni har bir o'q bo'yicha ikki toifaga ajratadi: Compact (tor/qisqa) va Regular (keng/uzun). Bu qiymatlarning kombinatsiyalari interfeysning iPhone, iPad, Mac Catalyst va CarPlay da qanday ko'rinishini belgilaydi. Apple Human Interface Guidelines, 2024 ga ko'ra, Size Class Auto Layout va UITraitCollection dan foydalanib barcha qurilmalar uchun bitta storyboard yaratishga imkon beradi. Tizim iOS 8 dan boshlab barcha iOS qurilmalarida ishlaydi.
Asosiy fikrlar
Size Class — Apple tomonidan iOS 8 da adaptiv maketni birlashtirish uchun joriy qilingan iOS ekranining mavhum tasnifidir. Qurilmaning aniq modelini tekshirish o'rniga, Size Class ikkita xarakteristikani aniqlaydi: gorizontal va vertikal bo'ylab mavjud joy. Har bir xarakteristika ikkita qiymatdan birini oladi — Compact (cheklangan joy) yoki Regular (yetarli joy). Bu qiymatlarning kombinatsiyasi trait collection ni hosil qiladi, u interfeysning barcha elementlariga uzatiladi.
Size Class paydo bo'lishidan oldin dasturchilar iPhone va iPad uchun alohida storyboard lar yaratardi yoki kodda UI_USER_INTERFACE_IDIOM() tekshiruvlaridan foydalanardi. Bu kod takrorlanishiga, storyboard larning kengayishiga va yangi ekran o'lchamlarini qo'llab-quvvatlashda qiyinchiliklarga olib keldi. Size Class universal tizimni taklif qilib muammoni hal qildi: dasturchi interfeysni 4 Compact/Regular kombinatsiyasi uchun sozlaydi va iOS avtomatik ravishda mosini tanlaydi. iPad da Split View va turli iPhone o'lchamlarining paydo bo'lishi bilan tizim adaptiv maket uchun ajralmas bo'ldi.
Size Class iOS tomonidan joriy ekranning kengligi va balandligi asosida, yo'nalish va multitasking ni hisobga olgan holda hisoblanadi. Qiymatlar aniq piksellarga bog'liq emas — bu mantiqiy toifadir. Masalan, iPhone 16 Pro portretda gorizontal Compact va vertikal Regular ga ega. Xuddi shu iPhone landshaftda — ikkala o'qda Compact. Split View da 1/3 ekranni egallagan ilova gorizontal Compact oladi, to'liq ekran rejimida esa Regular. Tizim yo'nalish yoki Split View o'zgarganda Size Class ni avtomatik yangilaydi.
Size Class ikki o'qda ikki qiymatning to'rt kombinatsiyasidan foydalanadi. Har bir kombinatsiya qurilma turiga va uning yo'nalishiga qarab o'z qo'llanilishiga ega. Bu kombinatsiyalarni tushunish iOS uchun adaptiv interfeys dizaynining asosidir. Tizim barcha amaldagi Apple qurilmalarini qamrab oladi: iPhone, iPad, Mac Catalyst va CarPlay. Apple wAny hAny kombinatsiyasidan (asosiy maket) boshlashni va aniq kombinatsiyalar uchun aniqlashtirishni tavsiya qiladi.
wCompact hRegular — portret iPhone (ba'zi hollarda Plus/Max dan tashqari). wCompact hCompact — landshaft iPhone SE/6/7/8. wRegular hRegular — to'liq ekran iPad har qanday yo'nalishda, iPhone Plus/Max landshaftda. wRegular hCompact — tor tarkibli landshaft iPad. Har bir kombinatsiya qaysi constraint lar va elementlar faol ekanligini aniqlaydi. Dasturchi Interface Builder da har bir kombinatsiya uchun alohida ko'rinish o'rnatishi mumkin.
Mac Catalyst da Size Class har doim wRegular hRegular — to'liq o'lchamli interfeys. Bu iPad ilovasining Mac versiyasi maksimal joy olishini anglatadi. Dasturchi Mac ni iPad dan farqlash uchun UIScreen.traitCollection.userInterfaceIdiom orqali qo'shimcha tekshiruvlardan foydalanishi mumkin. Mac da Size Class barqaror ishlaydi, lekin Catalyst ilovalari ko'pincha Size Class doirasidan tashqariga chiqadigan sichqoncha va klaviatura moslashuvini talab qiladi.
Size Class qaysi Auto Layout constraint lari faolligini, qaysi interfeys elementlari ko'rinishini va subview larning joylashishini aniqlaydi. Dasturchi turli Size Class lar uchun turli constraint lar o'rnatishi mumkin va iOS trait collection o'zgarganda ularni avtomatik almashtiradi. Masalan, iPad da (wRegular hRegular) jadval tafsilotlar bilan Master-Detail da ko'rsatiladi, iPhone da (wCompact hRegular) — Navigation Stack da. Bu Size Class bilan adaptiv maketning asosiy stsenariysidir.
Interface Builder da dasturchi Vary for Traits tugmasi orqali Size Class kombinatsiyasini tanlaydi va faqat shu kombinatsiya uchun ishlashi kerak bo'lgan constraint lar qo'shadi. wAny hAny uchun o'rnatilgan constraint lar har doim ishlaydi. Muayyan kombinatsiya uchun o'rnatilgan constraint lar faqat Size Class mos kelganda faollashadi. Agar kombinatsiya uchun maxsus constraint lar o'rnatilmagan bo'lsa, asosiy constraint lar ishlatiladi. Size Class o'zgarganda iOS constraint to'plamlari orasidagi o'tishni animatsiya qiladi.
Installed bayrog'i Interface Builder da ma'lum Size Class lar uchun elementlarni yashirishga imkon beradi. Dasturchi elementni tanlangan kombinatsiya uchun Uninstalled deb belgilaydi. Masalan, Details tugmasi faqat iPad da (wRegular hRegular) ko'rinadi, iPhone da esa yashirin. Bu kodda isHidden ni boshqarishdan osonroq. Dasturiy yashirish uchun traitCollectionDidChange ni override qilish yoki willTransition metodidan foydalaniladi, bunda joriy Size Class tekshiriladi.
Interface Builder Size Class bilan ishlash uchun Vary for Traits vizual vositasini taqdim etadi. Dasturchi kerakli kombinatsiyani (kenglik va balandlik) tanlaydi va Interface Builder bu kombinatsiya uchun ekran oldindan ko'rishini ko'rsatadi. Bu rejimda qilingan barcha constraint, o'lcham, shrift va ko'rinish o'zgarishlari faqat tanlangan Size Class ga qo'llaniladi. Rejimdan chiqish sozlamalarni mustahkamlaydi. Bu yondashuv turli qurilmalar uchun moslashuv kodi yozish zaruratini bartaraf qiladi.
Size Class ni sozlash uchun Interface Builder da dasturchi storyboard ni ochadi, view controller ni tanlaydi va pastki panelda Vary for Traits tugmasini bosadi. Keyin Width (Compact, Regular yoki Any) va Height (Compact, Regular yoki Any) ni tanlaydi. Interfeys tanlangan kombinatsiya uchun tahrirlash rejimiga o'tadi. Barcha constraint o'zgarishlari, elementlarni qo'shish yoki olib tashlash faqat shu kombinatsiyaga qo'llaniladi. Sozlash tugagach, dasturchi rejimdan chiqadi — o'zgarishlar aniq Size Class kombinatsiyasi uchun saqlanadi.
Apple wAny hAny uchun asosiy maketdan boshlashni (barcha qurilmalarni qamrab oluvchi asosiy kombinatsiya) tavsiya qiladi. Keyin muammoli kombinatsiyalar uchun maketni aniqlashtiring: wCompact hRegular (portret iPhone) va wRegular hRegular (iPad). Har bir kombinatsiyani sozlash tavsiya etilmaydi — faqat maket buziladigan joylarda. Haddan tashqari sozlash qo'llab-quvvatlashni qiyinlashtiradi. Shriftlarni aniq sozlash uchun Size Class o'rniga Dynamic Type dan foydalaning: shriftlar avtomatik ravishda ekran o'lchamiga moslashadi.
UITraitCollection — joriy Size Class va boshqa muhit xarakteristikalarini (force touch, display scale, user interface idiom) o'z ichiga olgan iOS sinfidir. Har bir UIView va UIViewController ota-onadan meros qilib olingan o'z traitCollection ga ega. Dasturchi Size Class ni traitCollection.horizontalSizeClass va traitCollection.verticalSizeClass orqali oladi, ular UIUserInterfaceSizeClass (.compact, .regular yoki .unspecified) qaytaradi. Size Class o'zgarishi traitCollectionDidChange ni override qilish orqali kuzatiladi.
Misolni ko'rib chiqaylik: UICollectionView maketini Size Class ga moslashtirish. iPad da (wRegular hRegular) ikki ustunli UICollectionViewCompositionalLayout dan foydalanamiz, iPhone da (wCompact hRegular) — bir ustunli. Kod gorizontal Size Class ni tekshiradi va tegishli maketni tanlaydi. Aylanish yoki Split View ga o'tishda iOS traitCollectionDidChange ni chaqiradi va controller maketni animatsiya bilan almashtiradi.
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if traitCollection.horizontalSizeClass == .Compact {
collectionView.collectionViewLayout = SingleColumnLayout()
} else {
collectionView.collectionViewLayout = DoubleColumnLayout()
}
}
traitCollectionDidChange metodi Size Class ning har o'zgarishida chaqiriladi: qurilmaning aylanishi, Split View ga kirish/chiqish, tashqi displeyning ulanishi. Bu metodda dasturchi maketni yangilaydi, to'plamlarni qayta yuklaydi, constraint prioritetlarini yangilaydi yoki elementlar ko'rinishini o'zgartiradi. Aynan Size Class o'zgarganligini tekshirish muhim, boshqa xarakteristika emas: traitCollection.horizontalSizeClass ni previousTraitCollection?.horizontalSizeClass bilan solishtiring. Optimizatsiya force touch yoki display scale o'zgarganda keraksiz qayta chizishlarning oldini oladi.
Turli Apple qurilmalari turli Size Class kombinatsiyalariga ega va dasturchi bu xususiyatlarni hisobga olishi kerak. iPhone portretda — wCompact hRegular, landshaftda — modelga bog'liq: iPhone SE/6/7/8 (wCompact hCompact), iPhone X va yangilari (wCompact hCompact yoki tarkibga qarab wCompact hRegular). To'liq ekran rejimida iPad — wRegular hRegular, Split View da — wCompact hRegular (1/3 ekran) yoki wRegular hRegular (2/3 ekran) bo'lishi mumkin. Mac Catalyst — har doim wRegular hRegular.
iPhone da Size Class ko'pchilik modellar uchun barqaror, ammo nuanslar bor. iPhone Plus (6+, 7+, 8+) va Max (X, XS, 11 Pro, 13–16 Pro Max) landshaftda wRegular hCompact ga ega — iPad mini kabi. Bu katta iPhone larda landshaftda tarkibni ikki ustunda joylashtirishga imkon beradi. iPhone SE (1–3 avlod) landshaftda — wCompact hCompact. Portretda barcha iPhone larda vertikal Size Class — Regular, landshaftda iPhone SE dan tashqari. Gorizontal — portret va landshaft uchun har doim Compact (landshaftda Plus/Max dan tashqari).
iPad to'liq ekran rejimida — wRegular hRegular, maketga maksimal moslashuvchanlik beradi. Split View da xatti-harakat o'zgaradi: ilova 1/3 ekranni egallasa (Slide Over yoki 1/3 da Split), gorizontal Size Class Compact bo'ladi, vertikal esa Regular qoladi. 2/3 ekranda — wRegular hRegular. Dasturchi interfeysni Split View ning barcha rejimlarida sinab ko'rishi kerak, chunki Size Class dinamik o'zgaradi. Apple iPad da izchil xatti-harakat uchun Size Class ni UISplitViewController bilan birga ishlatishni tavsiya qiladi.
Tez-tez so'raladigan savollar
Size Class — 4 kombinatsiyali diskret tizim, CSS-breakpoint lar esa ixtiyoriy nuqtalarga ega uzluksiz tizimdir. Size Class qurilmalarni xatti-harakatiga ko'ra guruhlab, aniq ekran o'lchamlaridan abstraktsiya qiladi. CSS-breakpoint lar piksellarga bog'liq, Size Class — Compact/Regular mantiqiy toifalariga.
iPhone Plus/Max landshaftda tarkibni ikki ustunda ko'rsatish uchun yetarli ekran kengligiga ega (iPad mini kabi). Apple dasturchi qo'shimcha tekshiruvlarsiz multi-column layout ishlatishi uchun gorizontal Regular ni tayinlaydi. Bu iPhone uchun Compact qoidasidan istisnodir.
Size Class iOS tomonidan qurilmaning haqiqiy xarakteristikalari asosida aniqlanadi va ilova kodidan o'zgartirilmaydi. Dasturchi faqat joriy qiymatga reaksiya berishi mumkin. System UI tizim elementlari uchun Size Class ni bekor qilishi mumkin, ammo ilovada bu mumkin emas.
SwiftUI Size Class dan to'g'ridan-to'g'ri foydalanmaydi — buning o'rniga dasturchi joriy qiymatni o'qish uchun @Environment(\.horizontalSizeClass) modifikatorlarini qo'llaydi. SwiftUI yuqori darajali vositalarni taklif qiladi: Size Classes va Layout protokoli bilan AnyLayout adaptiv maket uchun.
Ha, Stage Manager yoki Sidecar orqali tashqi displey ulanganda iOS Size Class ni yangilaydi. Tashqi monitor odatda wRegular hRegular oladi, asosiy ekran esa o'z Size Class ini saqlaydi. traitCollectionDidChange har bir ekranda oynalar uchun mustaqil chaqiriladi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.
Shuningdek o'qing