Sobes.tech
Middle+

გააზიარეთ iOS-ის Composition Layout-ის შესახებ და მისი გამოყენება რთული მომხმარებლის ინტერფეისების შესაქმნელად.

sobes.tech AI

პასუხი AI-სგან

კომპოზიციური განლაგება — ეს არის მოქნილი მექანიზმი კოლექციის განლაგებების (UICollectionView) შექმნისთვის, რომელიც წარმოდგენილია iOS 13-ში. იგი საშუალებას აძლევს დეკლარატიულად აღწეროს სექციებისა და ელემენტების სტრუქტურა, რაც ამარტივებს რთული და ადაპტირებადი UI-ების შექმნას.

ძირითადი უპირატესობები:

  • ბლოკებისგან აგება: განლაგება შედგება პატარა ნაწილებისგან (items, groups, sections).
  • მოწესრიგებულობა: მხარს უჭერს სხვადასხვა ტიპის განლაგებებს (სია, ქსელი, ვერტიკალური/ჰორიზონტალური სლაიდერი) ერთ კოლექციაში.
  • ადაპტირებადი: ადვილად ერგება ეკრანის ზომის და მოწყობილობის მიმართულების ცვლილებებს.
  • დეკლარატიული: განლაგების აღწერა უფრო გასაგებია და გამომსახველია, ვიდრე ტრადიციული UICollectionViewFlowLayout.
  • პროდუქტიულობა: ოპტიმიზირებულია დიდი რაოდენობის ელემენტებთან მუშაობისთვის.

ძირითადი კომპონენტები:

  • NSCollectionLayoutItem: აღწერს ელემენტს კოლექციაში. განსაზღვრავს მის ზომას მასში მყოფ ჯგუფთან მიმართებაში.
  • NSCollectionLayoutGroup: აღწერს ჯგუფს. შეიძლება იყოს ვერტიკალური, ჰორიზონტალური ან მორგებული. განსაზღვრავს ჯგუფის ზომას მასში მყოფ სექციასთან მიმართებაში.
  • NSCollectionLayoutSection: აღწერს სექციას კოლექციაში. შეიცავს ჯგუფებს და მართავს მათი განლაგებას. განსაზღვრავს სექციის ქცევას (მაგ., სლაიდერი).
  • NSCollectionLayoutBoundarySupplementaryItem: გამოიყენება დამატებითი ელემენტების დასამატებლად სექციას (ზედა, ქვედა სათაურები).
  • UICollectionViewCompositionalLayout: განლაგების კლასი, რომელიც აგროვებს სექციებს საბოლოო განლაგებად.

სადეგი მაგალითი — მარტივი სექციის შექმნა ჰორიზონტალური სლაიდერით:

import UIKit

func createLayout() -> UICollectionViewLayout {
    // ელემენტი
    let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),
                                         heightDimension: .fractionalHeight(1.0))
    let item = NSCollectionLayoutItem(layoutSize: itemSize)

    // ჯგუფი
    let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.9),
                                          heightDimension: .absolute(200))
    let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize,
                                                    subitems: [item])
    group.interItemSpacing = .fixed(10) // ელემენტებს შორის ფარი

    // სექცია
    let section = NSCollectionLayoutSection(group: group)
    section.orthogonalScrollingBehavior = .continuous // ჰორიზონტალური სლაიდერი
    section.contentInsets = NSDirectionalEdgeInsets(top: 10, leading: 10, bottom: 10, trailing: 10) // შიდა მარყუჟები
    section.interGroupSpacing = 10 // ჯგუფებს შორის ფარი

    // განლაგება
    let layout = UICollectionViewCompositionalLayout(section: section)
    return layout
}

მრავალმხრივი ინტერფეისების შექმნისთვის შესაძლებელია სხვადასხვა ჯგუფებისა და სექციების ტიპების კომბინაცია, დეკორატიული ელემენტების დამატება და დამატებითი ელემენტების გამოყენება.

კომპოზიციური განლაგება тесно связана с Diffable Data Sources (UICollectionViewDiffableDataSource), რაც ამარტივებს მონაცემების მართვას და ცვლილებების ანიმაციას. ამ ორი ტექნოლოგიის გაერთიანება საშუალებას აძლევს შექმნათ თანამედროვე, ეფექტური და ადვილად შენარჩუნებადი მომხმარებლის ინტერფეისები.