Sobes.tech
Middle+

Fale sobre Composition Layout no iOS e seu uso para criar interfaces de usuário complexas.

sobes.tech IA

Resposta da IA

O Layout Composicional é um mecanismo flexível para criar layouts de coleções (UICollectionView), apresentado no iOS 13. Permite descrever a estrutura de secções e elementos de forma declarativa, simplificando a criação de interfaces de utilizador complexas e adaptáveis.

Vantagens principais:

  • Construção a partir de blocos: O layout é composto por partes menores (items, grupos, secções).
  • Flexibilidade: Suporta diferentes tipos de layouts (listas, grelhas, grupos com scroll vertical/horizontal) numa mesma coleção.
  • Adaptabilidade: Ajusta-se facilmente a mudanças no tamanho do ecrã e orientação do dispositivo.
  • Declaratividade: A descrição do layout é mais compreensível e expressiva em comparação com UICollectionViewFlowLayout tradicional.
  • Performance: Otimizado para lidar com um grande número de elementos.

Componentes chave:

  • NSCollectionLayoutItem: Descreve um elemento na coleção. Define o seu tamanho em relação ao grupo que o contém.
  • NSCollectionLayoutGroup: Descreve um grupo de elementos. Pode ser vertical, horizontal ou personalizado. Define o tamanho do grupo em relação à secção que o contém.
  • NSCollectionLayoutSection: Descreve uma secção na coleção. Contém grupos e gere a sua disposição. Define o comportamento da secção (por exemplo, scroll).
  • NSCollectionLayoutBoundarySupplementaryItem: Usado para adicionar elementos adicionais à secção (cabeçalhos, rodapés).
  • UICollectionViewCompositionalLayout: Classe de layout que agrupa as secções na disposição final.

Exemplo de criação de uma secção simples com scroll horizontal:

import UIKit

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

    // Grupo
    let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.9),
                                          heightDimension: .absolute(200))
    let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize,
                                                    subitems: [item])
    group.interItemSpacing = .fixed(10) // Espaçamento entre elementos no grupo

    // Secção
    let section = NSCollectionLayoutSection(group: group)
    section.orthogonalScrollingBehavior = .continuous // Scroll horizontal na secção
    section.contentInsets = NSDirectionalEdgeInsets(top: 10, leading: 10, bottom: 10, trailing: 10) // Margens da secção
    section.interGroupSpacing = 10 // Espaçamento entre grupos na secção

    // Layout
    let layout = UICollectionViewCompositionalLayout(section: section)
    return layout
}

Para criar interfaces mais complexas, pode-se combinar diferentes tipos de grupos e secções, adicionar elementos decorativos e usar elementos suplementares.

O Layout Composicional está estreitamente relacionado com as Fontes de Dados Diffable (UICollectionViewDiffableDataSource), o que facilita a gestão dos dados da coleção e a animação de alterações. A combinação destas duas tecnologias permite criar interfaces modernas, eficientes e fáceis de manter.