iOS

iOS) UITableView 동적 셀 높이 잡기

Jimmy Youn 2021. 5. 23. 00:36

테이블뷰를 사용해서 주문 목록을 구현을 하는 중에 여러 row 셀들이 있는데 그중 한 셀에는 상품들이 늘어날때마다 높이가 늘어나야 했다.  이 문제를 해결하기 위해 동적으로 테이블뷰의 높이를 잡는 방법을 적용해보았다. 

 

  •  테이블뷰의 각각의 row 높이를 동적으로 잡기 전에는 UITableViewDelegate 메서드에서 직접적으로 셀의 height 를 잡아줬다. 
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    guard let mydata = AllProductData else {
      return 0
    }
    
    var realDatacount = 0
    
    if mydata.count % 2 != 0 {  // 셀에 나오는 상품군 갯수가 홀수개인지 짝수개인지 판별 
      realDatacount = mydata.count + 1
    } else {
      realDatacount = mydata.count
    }
    
    
    
    switch indexPath.row {
    case 0:
      return CGFloat(230)
    case 1 :
      return CGFloat(120)
    case 2 :
      return CGFloat((260 * realDatacount) / 2) + 200 // 상품 갯수를 판별해서 height 를 잡아줌
    default:
      return 0
    }
  }

 

  • 테이블뷰의 셀 높이를 동적으로 잡기 위해선 오히려 코드가 간결하고 더 적었다. 하지만 동적으로 잡기 위해선 각셀들, 그리고 셀 안에 있는 요소들의 오토레이아웃이 정확하게 잘 잡혀있어야 작동한다는 것을 알게되었다. 
extension DetailedOrderViewController : UITableViewDelegate {
  func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension // 동적으로 잡아줌.
  }
  
  func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    return 200 // 예상 height 를 적어준다.
  }
}