Sobes.tech
Middle+

Povedzte o Composition Layout v iOS a jeho použití na tvorbu zložitých používateľských rozhraní.

sobes.tech AI

Odpoveď od AI

Kompozičné rozloženie — je flexibilný mechanizmus na tvorbu rozložení kolekcií (UICollectionView), predstavený v iOS 13. Umožňuje deklaratívne popisovanie štruktúry sekcií a prvkov, čím zjednodušuje tvorbu zložitých a prispôsobivých používateľských rozhraní.

Hlavné výhody:

  • Stavba z blokov: Rozloženie sa skladá z menších častí (items, groups, sections).
  • Flexibilita: Podporuje rôzne typy rozložení (zoznamy, mriežky, skupiny s vertikálnym/horizontálnym posúvaním) v jednej kolekcii.
  • Prispôsobivosť: Jednoducho sa prispôsobí zmenám veľkosti obrazovky a orientácie zariadenia.
  • Deklaratívnosť: Opis rozloženia je prehľadnejší a výstižnejší v porovnaní s tradičným UICollectionViewFlowLayout.
  • Výkon: Optimalizované pre prácu s veľkým množstvom prvkov.

Kľúčové komponenty:

  • NSCollectionLayoutItem: Opisuje prvok v kolekcii. Určuje jeho veľkosť vzhľadom na skupinu, ktorú obsahuje.
  • NSCollectionLayoutGroup: Opisuje skupinu prvkov. Môže byť vertikálna, horizontálna alebo vlastná. Určuje veľkosť skupiny vzhľadom na sekciu, ktorú obsahuje.
  • NSCollectionLayoutSection: Opisuje sekciu v kolekcii. Obsahuje skupiny a riadi ich usporiadanie. Určuje správanie sekcie (napr., posúvanie).
  • NSCollectionLayoutBoundarySupplementaryItem: Používa sa na pridanie doplnkových prvkov ku sekcii (záhlavia, päty).
  • UICollectionViewCompositionalLayout: Trieda rozloženia, ktorá skladá sekcie do finálneho rozloženia.

Príklad vytvorenia jednoduchej sekcie s horizontálnym posúvaním:

import UIKit

func createLayout() -> UICollectionViewLayout {
    // Prvok
    let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),
                                         heightDimension: .fractionalHeight(1.0))
    let item = NSCollectionLayoutItem(layoutSize: itemSize)

    // Skupina
    let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.9),
                                          heightDimension: .absolute(200))
    let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize,
                                                    subitems: [item])
    group.interItemSpacing = .fixed(10) // Medzera medzi prvkami v skupine

    // Sekcia
    let section = NSCollectionLayoutSection(group: group)
    section.orthogonalScrollingBehavior = .continuous // Horizontálne posúvanie sekcie
    section.contentInsets = NSDirectionalEdgeInsets(top: 10, leading: 10, bottom: 10, trailing: 10) // Okraje sekcie
    section.interGroupSpacing = 10 // Medzera medzi skupinami v sekcii

    // Rozloženie
    let layout = UICollectionViewCompositionalLayout(section: section)
    return layout
}

Pre tvorbu zložitejších rozhraní je možné kombinovať rôzne typy skupín a sekcií, pridávať dekoratívne prvky a používať doplnkové prvky.

Kompozičné rozloženie je úzko spojené s Diffable Data Sources (UICollectionViewDiffableDataSource), čo uľahčuje správu dát kolekcie a animácie zmien. Kombináciou týchto dvoch technológií je možné vytvárať moderné, efektívne a ľahko udržiavateľné používateľské rozhrania.