iOS/UIKIT

셀의 개수에 맞춰 자동으로 높이가 조절되는 테이블 뷰를 구현

밤새는 탐험가89 2024. 10. 21. 05:50

 

class IntrinsicTableView: UITableView {
    override var intrinsicContentSize: CGSize {
        let numberOfRows = self.numberOfRows(inSection: 0)
        
        // 셀의 고정된 높이 (예: 130)
        let cellHeight: CGFloat = 150.0
        
        // 테이블 뷰의 전체 높이 = 셀 개수 * 셀 높이
        let totalHeight = CGFloat(numberOfRows) * cellHeight
        
        return CGSize(width: self.contentSize.width, height: totalHeight)
    }
}

 

 

코드 설명

1. override var intrinsicContentSize: CGSize

  • intrinsicContentSize는 뷰의 "내재된 크기"를 반환하는 속성입니다. 이 속성은 뷰가 특정 크기를 가지지 않았을 때 뷰가 차지하려고 하는 크기를 결정합니다.
  • 여기서는 테이블 뷰의 높이를 셀의 개수에 맞추어 계산하고, 그 결과로 CGSize 객체를 반환하여 테이블 뷰의 높이를 조절합니다.

2. let numberOfRows = self.numberOfRows(inSection: 0)

  • numberOfRows(inSection:) 메서드를 사용하여 첫 번째 섹션의 셀 개수를 가져옵니다. 이 값은 테이블 뷰의 섹션 0에 몇 개의 셀이 있는지 나타냅니다.

3. let cellHeight: CGFloat = 150.0

  • 셀 하나의 높이를 고정된 값으로 지정합니다. 이 예제에서는 각 셀이 150포인트 높이를 가지는 것으로 가정합니다.

4. let totalHeight = CGFloat(numberOfRows) * cellHeight

  • 테이블 뷰의 전체 높이는 셀 개수에 셀의 고정된 높이를 곱한 값으로 계산됩니다. 예를 들어, 섹션 0에 5개의 셀이 있다면, 테이블 뷰의 높이는 5 * 150 = 750포인트가 됩니다.

5. return CGSize(width: self.contentSize.width, height: totalHeight)

  • 계산된 높이와 테이블 뷰의 콘텐츠 너비(self.contentSize.width)를 사용하여 CGSize를 반환합니다. 이 값이 IntrinsicTableView의 실제 크기를 결정합니다.