728x90
728x90
π WWDC19 - Advances in Collection View Layout
Current State-of-the-Art
- UICollectionView λ iOS 6 μμ μ²μ μκ°λμλ€.
- λ°μ΄ν°λ₯Ό λ λλ§νλ ν΄λμ€μ CollectionView μ layout μ κ΄λ¦¬νλ λκ°μ ν΄λμ€κ° νμνλ€.
- CollectionView layout μ μΆμνλ νμ μ΄κ³ , μλΈν΄λμ€λ₯Ό λ§λ€μ΄ μ¬μ©ν΄μΌ νλ€.
- μλΈ ν΄λμ€μΈ CollectionView flow layout μ iOS 6λΆν° κ°μ΄ μ¬μ©νλ€.
- CollectionView layout μ λΌμΈ κΈ°λ°μ λ μ΄μμμ λ§λλλ° μ ν©νμ§λ§, μμ¦μ μ±λ€μ λ μ΄μμμ΄ μ μ 볡μ‘ν΄μ§κ³ μλ€.
- iOS 13 μμ μλ‘κ² λμ¨ μ±μ€ν μ΄μ UI π€?!
볡μ‘ν νλ©΄μ λν΄ custom layout class λ₯Ό λ§λ λ€λ©΄ κ³ λ €ν΄μΌν μ μ΄ λ§λ€.
- Boilerplate code λ λ§μ΄ μμ±λκ³ ,
- ν΄λΉ λμμΈμ΄ νΌν¬λ¨Όμ€ μ΄μκ° μλμ§ μ²΄ν¬λ ν΄μΌνκ³
- ν€λ νΈν° λ± Supplementary view, decoration view (λ°°κ²½?) μ λ μ΄μμμΌλ‘ μ€μ νκΈ°λ κΉλ€λ‘λ€.
- μ ν μ¬μ΄μ§λ μ²λ¦¬ν΄μΌν κ² λ§λ€ π
- 그리νμ¬..! λ μ΄μμμ λ§λλ ν΄λμ€λ₯Ό μλ‘κ² κ°μ Έμκ³ , Compositional Layout μ΄λΌκ³ λΆλ₯΄κΈ°λ‘ νλ€.
π What is compositional layout?
μ»΄ν¬μ§μ λ λ μ΄μμμ μΈκ°μ§ κΈ°μ‘°λ Composable, Flexible, Fast (κ΅¬μ± κ°λ₯ν, μ μ°ν, λΉ λ₯Έ) μ΄λ€.
- μ μ°νκ² μ€κ³λμ΄ μκΈ°μ compositional layout μΌλ‘ λͺ¨λ λ μ΄μμμ μμ±ν μ μμκ²μ΄λ€.
- νλ μμν¬μμ μ±λ₯μ λν μ΅μ νλ₯Ό μ 곡νκΈ° λλ¬Έμ κΈ°λ³Έμ μΌλ‘ λΉ λ₯΄λ€.
- compositional layout λ μ€λͺ νκ±°λ μ μνλ μμΌλ‘ μνλ μμ μ μμ±νλ μ μΈν API μ μΌμ’ μ΄λ€.
π Hello world compositional layout
- layout μ section μΌλ‘ ꡬμ±λμ΄ μκ³ ,
- section μ group μΌλ‘ ꡬμ±λμ΄ μκ³ ,
- group μ size λ₯Ό νμλ‘ νλ©° item λ€λ‘ ꡬμ±λμ΄ μκ³ ,
- item μ size λ₯Ό νμλ‘ νλ€.
NSCollectionLayoutSize
- μ¬μ΄μ¦λ λλΉμ λμ΄λ₯Ό κ°λλ€.
- λλΉμ λμ΄λ NSCollectionLayoutDimension μΌλ‘ λμ΄μλ€.
- fractionalHeight, fractionalWidth : containing group (row) μ κΈ°μ€μΌλ‘ λΉμ¨μ λ°λΌ μ μν μ μλ€.
- absolute : μ λμ μΈ point κ°
- estimated : μμΈ‘λλ point κ°, ν΄λΉ κ°λ³΄λ€ μ»€μ§ μ μλ€.
NSCollectionLayoutItem
- μμ΄ν μ κΈ°μ‘΄μ cell μ΄λ supplementary view μ κ°λ€.
- μμ±μμ Size λ₯Ό λ겨주면 λλ€.
NSCollectionLayoutGroup
- κ·Έλ£Ήμ λ μ΄μμμ κΈ°λ³Έ λ¨μμ΄κ³ , κ°λ‘, μΈλ‘, 컀μ€ν μΈκ°μ§ ννκ° μλ€.
- μμ΄ν λ€μ΄ κ°λ‘ μΈλ‘ μΆμ λ°λΌ κ·Έλ €μ§μ§ μλ κ²½μ° μ»€μ€ν ννλ₯Ό μ¬μ©ν΄μ νΉμ μ’νμ μμΉλ₯Ό μ§μ νλ©΄ λλ€.
NSCollectionLayoutSection
- CollectionView μ κΈ°μ‘΄ μΉμ κ³Ό λμΌνκ³ , μΉμ μ λνλΌ λ°μ΄ν°λ λ°μ΄ν° μμ€μ 맀νλλ€.
UICollectionViewCompositionalLayout
- iOS μ κ²½μ°μλ UICollectionViewCompositionalLayout μ΄ μ΅μμ λ μ΄μμ ν΄λμ€κ° λλ€.
- Mac μμμ λ μ΄μμ ν΄λμ€λ λ€λ₯Έλ° μ¬μν μ°¨μ΄μ λ€μ΄ μλ€.
- sectionProvider κ° μμ΄ ν΄λ‘μ λ₯Ό ν΅ν΄ μΉμ λ§λ€ λ μ΄μμμ λ€λ₯΄κ² μ€μ ν μ μλ€.
Demo π
- λͺ¨λ μ½λλ λμΌνκ² “Item - Group - Section - Layout” μΈ 4κ°μ§μ κ³μΈ΅ κ΅¬μ‘°λ‘ λμ΄μλ€.
- Item μ ν¬κΈ°λ₯Ό μ€μ λ‘ κ²°μ νλ건 group μ ν¬κΈ°μ΄λ€. 1μ€μ§λ¦¬μμλ ν°μλ―Έκ° μμ΄λ³΄μΌ μ μμ§λ§, group size λ‘ λ μ΄μμμ λ€μνκ² λ°°μΉνλ€.
첫λ²μ§Έ μμ λ groupSize κ° 100% λ‘, height λ absolute 44 λ‘ λμ΄μμ - λλ°μ΄μ€ νμ μ κ°λ‘, μΈλ‘λ‘ νμ λ λμΌν λμ΄λ₯Ό κ°μ§
GridViewController
λλ²μ§Έ μμ λ κ°λ‘κΈ°μ€ 5κ°μ© λ€μ΄κ°λ μ μ¬κ°ν μμ΄ν
- group size μ width κΈ°μ€μ row ν μ€μ μλ―ΈνκΈ°μ 100% λ‘ μ€μ νλ©΄ κ°λ‘ μ μ²΄λ‘ μ€μ λλ€. height λ row μ λν 20% λ‘ μ€μ λμ΄μλ€.
- item size μμ μ€μ νλ width λ νλμ group λλ row λ₯Ό κΈ°μ€μΌλ‘νλ€. width λ groupSize μ 20% μ΄κΈ°μ νλμ row μ 5κ°μ μμ΄ν μ΄ λ€μ΄κ° μ μλ€.
InsetItemsGridViewController
λλ²μ§Έ μμ μμ item κ° κ°κ²©μ λκ³ μΆλ€λ©΄
- item μ inset μ μΆκ°νλ €λ©΄ item.contentInsets = NSDirectionEdgeInsets(...) νμ€μ μ½λλ©΄ κ°λ₯νλ€
TwoColumnViewController
μΈλ²μ§Έ μμ λ two column grid example
- NSCollectionLayoutGroup.horizontal μ μ΄μ©ν΄μ column μ 2κ°λ‘ λ§λ€μλ€.
- 1 κ°μ row μ 2κ°μ group μ λ£λλ€λ λ» ?!
- item μ μ΅λ width λ group width μ λμΌν΄μ§λ€.
- group κ³Ό section μ λν κ°κ²© μ€μ
- group μ spacing μ interItemSpacing μ μ¬μ©νλ©΄ λλ€.
- section μ λν΄μλ contentInsets μ μΆκ°ν μ μλ€.
DistinctSectionsViewController
λ€λ²μ§Έ μμ λ μΉμ λ§λ€ λ μ΄μμμ΄ λ€λ₯Έ ννμ΄λ€.
- 첫λ²μ§Έ μΉμ : 1 column, 리μ€νΈ νν
- λλ²μ§Έ μΉμ : 5 column, μ μ¬κ°ν μμ΄ν
- μΈλ²μ§Έ μΉμ : 3 column, μ§μ¬κ°ν μμ΄ν
createLayout λ©μλλ₯Ό 보면 UICollectionViewCompositionalLayout μμ±μμμ sectionProvider ν΄λ‘μ λ₯Ό λκΈ°λ λΆλΆμ΄ λ€λ₯΄λ€.
- ν΄λ‘μ μ 맀κ°λ³μ sectionIndex : 0, 1, 2 / layoutEnvironment : λ μ΄μμ νκ²½
- layoutEnvironment μμ μ€μ ν΄λ columns κ°μλ₯Ό group μμ±μ count μΈμλ‘ μ λ¬νλ€.
- item, group, section μ μ€μ νλ λΆλΆμ κΈ°μ‘΄ μ½λλ€κ³Ό μ λΆ λμΌνλ€.
AdaptiveSectionsViewController
κ°λ‘λ‘ νμ ν λμ μμ΄ν κ°μκ° λνλλκ² μΈλ‘μ λ€λ₯Έ 건 μ΄λ»κ² νμκΉμ π
- μ΄μ μμ μ λ€λ₯Έμ μ SectionLayoutKind μμ width μ λ°λΌ column κ°μλ₯Ό μ‘°μ ν΄μ£Όκ³ μλ€.
π» λ€μ μ΄μκ°μλ
- μμ§ item μ λν΄μλ§ μ΄ν΄λ³΄μκΈ°μ supplementary view (ν€λ, νΈν°), decoration view (λ°°κ²½?)μ λν΄μλ μμλ³Ό μμ !
- Steve λ₯Ό λ€μ μ΄λν©λλ€
728x90
728x90
'π iOS > WWDC' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[WWDC20] The Push Notifications primer (APNs / iOS νΈμ λ±λ‘) (0) | 2023.02.14 |
---|---|
[WWDC18] iOS Memory Deep Dive (2) | 2022.11.27 |
[WWDC19] Data Flow Through SwiftUI - Part 2 (0) | 2022.08.30 |
[WWDC19] Data Flow Through SwiftUI - Part 1 (0) | 2022.08.30 |
[WWDC19] LLDB: Beyond "po" (0) | 2022.07.04 |