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 를 적어준다.
}
}