[swift] IGListKit에서 테이블 뷰의 들여쓰기 설정하는 방법

IGListKit은 데이터 소스 및 컬렉션 컨트롤러를 사용하여 테이블 뷰를 구성합니다. 따라서 들여쓰기를 설정하려면 이러한 컨트롤러 및 데이터 소스에서 설정을 수행해야 합니다.

들여쓰기를 설정하기 위해 먼저 IGListBindingSectionController를 사용하는 컬렉션 컨트롤러를 만들어야 합니다. IGListBindingSectionController는 들여쓰기를 제어하는 데 도움이 되는 기능을 제공합니다.

class MySectionController: IGListBindingSectionController {
    var item: Any?
    
    override init() {
        super.init()
        
        inset = UIEdgeInsets(top: 0, left: 16, bottom: 0, right: 16) // 들여쓰기 설정
    }
    
    override func sizeForItem(at index: Int) -> CGSize {
        // 셀의 크기를 반환하는 로직
    }
    
    override func cellForItem(at index: Int) -> UICollectionViewCell {
        // 셀을 반환하는 로직
    }
    
    override func didUpdate(to object: Any) {
        item = object
    }
    
    override func didSelectItem(at index: Int) {
        // 아이템이 선택되었을 때 처리하는 로직
    }
}

위의 코드에서는 MySectionController라는 사용자 정의 컨트롤러를 생성하고, 들여쓰기를 위해 inset 속성을 설정하고 있습니다. 위의 예시에서는 왼쪽에서 16 포인트, 오른쪽에서 16 포인트로 들여쓰기가 설정되었습니다. 이 값을 원하는 대로 수정해주십시오.

또한, sizeForItem 메소드에서는 셀의 크기를 반환하는 로직을 구현하고, cellForItem 메소드에서는 셀을 반환하는 로직을 구현해야 합니다. 필요에 따라 이러한 메소드를 수정하십시오.

이렇게 설정된 MySectionController를 IGListBindingSectionControllerDelegate의 sectionController 메소드에서 반환해주면, 테이블 뷰의 각 섹션에 들여쓰기가 적용됩니다.

class MyViewController: UIViewController, IGListAdapterDataSource {

    private let adapter: IGListAdapter = IGListAdapter(updater: IGListAdapterUpdater(), viewController: self, workingRangeSize: 0)
    
    private let collectionView: UICollectionView = {
        // 컬렉션 뷰 초기화 및 설정 로직
    }()
    
    private var items: [Any] = []
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 컨트롤러 및 뷰 설정 로직
        adapter.dataSource = self
    }
    
    // 섹션 컨트롤러 생성 및 반환
    func sectionController(for object: Any) -> IGListSectionController {
        return MySectionController()
    }
    
    // 테이블 뷰에 표시할 아이템 반환
    func objects(for listAdapter: IGListAdapter) -> [IGListDiffable] {
        return items
    }
    
    // 객체 식별
    func listAdapter(_ listAdapter: IGListAdapter, sectionControllerFor object: Any) -> IGListSectionController? {
        return MySectionController()
    }
}

위의 예시에서는 MyViewController 클래스가 IGListAdapterDataSource 프로토콜을 구현하고 있으며, sectionController(for:) 메소드에서 MySectionController를 반환하게 됩니다. 또한, objects(for:) 메소드에서는 테이블 뷰에 표시할 아이템 배열을 반환합니다.

이렇게 설정된 MyViewController를 사용하여 테이블 뷰를 구성하면 들여쓰기가 적용된 테이블 뷰를 만들 수 있습니다.