Sobes.tech
Middle+

Beszélj az iOS-ben található Composition Layout-ról és annak használatáról összetett felhasználói felületek létrehozásához.

sobes.tech MI

Válasz az MI-től

Összetett Elrendezés — ez egy rugalmas mechanizmus a kollekciók (UICollectionView) elrendezéseinek létrehozására, amelyet az iOS 13 mutatott be. Lehetővé teszi az szekciók és elemek szerkezetének deklaratív leírását, megkönnyítve a komplex és alkalmazkodó felhasználói felületek létrehozását.

Fő előnyei:

  • Blokk alapú építés: Az elrendezés kisebb részekből (items, groups, sections) áll össze.
  • Rugalmasság: Különböző típusú elrendezéseket támogat (listák, rácsok, függőleges/ vízszintes görgetésű csoportok) egy kollekcióban.
  • Alkalmazkodóképesség: Könnyen alkalmazkodik a képernyő méretének és az eszköz orientációjának változásaihoz.
  • Deklaratív: Az elrendezés leírása áttekinthetőbb és kifejezőbb, mint a hagyományos UICollectionViewFlowLayout.
  • Teljesítmény: Optimalizált nagy számú elem kezelésére.

Fő komponensek:

  • NSCollectionLayoutItem: Leírja az elemet a kollekcióban. Meghatározza méretét a hozzá tartozó csoporthoz viszonyítva.
  • NSCollectionLayoutGroup: Leírja a csoportot. Lehet függőleges, vízszintes vagy egyéni. Meghatározza a csoport méretét a hozzá tartozó szekcióhoz viszonyítva.
  • NSCollectionLayoutSection: Leírja a szekciót a kollekcióban. Tartalmaz csoportokat és kezeli azok elrendezését. Meghatározza a szekció viselkedését (pl. görgetés).
  • NSCollectionLayoutBoundarySupplementaryItem: Kiegészítő elemek hozzáadására szolgál a szekcióhoz (fejléc, lábléc).
  • UICollectionViewCompositionalLayout: Az elrendezés osztálya, amely összerakja a szekciókat végső elrendezéssé.

Egyszerű szekció horizontális görgetéssel példakód:

import UIKit

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

    // Csoport
    let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.9),
                                          heightDimension: .absolute(200))
    let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize,
                                                    subitems: [item])
    group.interItemSpacing = .fixed(10) // Számított távolság az elemek között a csoportban

    // Szekció
    let section = NSCollectionLayoutSection(group: group)
    section.orthogonalScrollingBehavior = .continuous // Vízszintes görgetés a szekcióban
    section.contentInsets = NSDirectionalEdgeInsets(top: 10, leading: 10, bottom: 10, trailing: 10) // Szekció margói
    section.interGroupSpacing = 10 // Távolság a csoportok között a szekcióban

    // Elrendezés
    let layout = UICollectionViewCompositionalLayout(section: section)
    return layout
}

Komplexebb felületekhez különböző csoport- és szekciótípusokat lehet kombinálni, dekoratív elemeket hozzáadni, és kiegészítő elemeket használni.

A Kompozíciós Elrendezés szorosan kapcsolódik a Diffable Data Sources (UICollectionViewDiffableDataSource) technológiához, amely megkönnyíti az adatok kezelését és az animációkat. Ezek együttes alkalmazásával modern, hatékony és könnyen karbantartható felhasználói felületek hozhatók létre.