UITableView 높이를 동적으로 지정하는 법(Cell 높이가 아닌 TableView 높이)

태그: 

3 답변 글타래를 보이고 있습니다
  • 글쓴이
    • 인담
      참가자
      • 글작성 : 9
      • 답글작성 : 9

      안녕하세요.

      최근 테이블뷰를 이용한 프로젝트에서 TableView를 이용한 UI를 구현하는 중 난관이 생겨 질문드립니다.

      제가 구현해야하는 UI의 특징은 다음과 같습니다.

      1. 메인 View는 ScrollView이다.
      2. ScrollView 안에는 정보 Label, ImageView등이 있다.
      3. 여러개의 아이템(갯수는 그때그때 다름)을 수직으로 쭉 보여준다.

      4. 마지막 아이템 하단에는 또 다른 UI Component(Ex: Button)이 존재한다.

       

      여기서 3.번을 구현하기 위해서 제가 생각한 방법은 scroll이 되지 않는 tableview를 만들고(SuperView에 ScrollView가 이미 있으므로) cell에 아이템 정보를 나타나게 한뒤 tableView의 자체 높이를 cell들이 로드되는 크기만큼 정하려고 해서 구글링을 하는데,

      Cell의 크기를 dynamic하게 만드는 방법은 많지만 tableView 높이를 cell의 갯수와 높이에 맞춰서 설정하는 법을 모르겠습니다.

      제가 원하는 UI를 구현하려면 어떻게 해야할까요?

      도움 이미지

    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 579

      아이템의 수가 수십 수백개 되는 것이 아니라면 TableView 보다는 StackView를 사용하는 것이 여러모로 좋지 않을까합니다.

      • 인담
        참가자
        • 글작성 : 9
        • 답글작성 : 9

        사실 질문 직후 아이템이 갯수가 10개 이하라  StackView를 사용하는게 여러가지면에서 낫다는 판단이 들어서 stackview를 사용해서 해당 기능을 구현하고 있습니다.

        하지만 만약 말씀하신대로 아이템 갯수가 100개 이상이라면 스크롤뷰안에 테이블 뷰는 어떻게 구성하는게 좋을까요?

    • 멍단비
      참가자
      • 글작성 : 10
      • 답글작성 : 98

      해보지는 않았지만, 음.. height라는 테이블뷰 높이를 지정할 변수하나 만들고 cellforrow delegate 에서 height += cell.bounds.height 라는 식으로 더해서 셀 높이값을 다 가져오게되면 테이블뷰 높이를 다시 지정하면 되려나 모르겠네요.

      • 인담
        참가자
        • 글작성 : 9
        • 답글작성 : 9

        cellforrow에 있는 메소드는 셀이 재사용될때마다 다시 호출되서 중복으로 높이가 계산되는 경우는 없을까요?

        좋은 조언 감사드립니다. 한번 공유하신 내용으로 적용해서 되는지 테스트해보겠습니다.!!

        • 멍단비
          참가자
          • 글작성 : 10
          • 답글작성 : 98

          그렇게 재사용까지 할정도로 개수가 많으면 디자인을 따로 빼지 않을까요?
          그래도 굳이 한다고하면 0번부터 n번까지 셀 높이를 어디 배열같은데다 집어넣어놓고 재사용할때마다 전체 셀 높이를 다시 입력하고 리로드 해주는 방법이 있을 것 같아요

        • 야곰
          키 마스터
          • 글작성 : 37
          • 답글작성 : 579

          저라면 tableHeaderView나 tableFooterView를 활용할 것 같아요.

    • 성훈
      참가자
      • 글작성 : 2
      • 답글작성 : 14

      UITableView의 contentSize를 이용하여 테이블뷰 높이를 변경하면 되지 않을까요?

       

      저라면 위와 같은 UI의 경우 야곰님이 말씀하신 대로 테이블 뷰 위의 UI는 tableHeaderView를 이용하고 아래는 tableFooterView를 이용하여 구현하는걸 선호합니다. 셀의 갯수 변화에도 유연하게 대처가 되고 높이 값을 직접 다룰 필요가 없어 더 깔끔하게 구현할 수 있습니다.

3 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 743-81-02195
통신판매업 신고번호 : 제 2022-충북청주-1278 호
고객센터 : 카카오톡채널 @yagom