ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • UITableView를 스냅킷으로 구현하면서 생겼던 이슈
    iOS 2018. 9. 30. 22:55

    기본적으로 UITableView의 디폴트 셀의 크기는 44입니다. 아이패드든 아이폰이든 어느 기종이든지 그건 바뀌지가 않습니다.


    따라서, 테이블뷰 셀을 짜면 어느 기종이라도 픽셀수와 보이는 모양새가 똑같아야 하는 게 정상입니다.


    이를 기반으로 커스텀 셀을 작성하는데, 묘하게 자꾸 기종마다 만드는 모양새가 달라지는 것을 발견했습니다.


       



    같은 아이폰 6s 시뮬레이터 사진입니다. 하나는 OS 12이고, 하나는 OS 9입니다.


    같은 모양이 안 나오죠.



    여기에 아이패드는 여백도 이상하게 나옵니다.


    조사해본 결과...

    iOS 10? 부터 테이블뷰가 셀의 크기를 자발적으로 계산해서.. 하이트를 추론(?)한다는 사실을 알았습니다.

    저는 당연히 44 하이트 고정을 생각해서 스냅킷 컨스트레인트를 느슨하게 주었고,.. 그 결과 

    이미지뷰의 instrincContentSize 로 인해 하이트를 과대 추론해, 44 보다 큰 값을 알아서 주고 있다는 사실을 알았습니다.


    따라서 OS별로 모양이 꺠져 보였던 것입니다.



     override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

            return UITableView.automaticDimension

        }



    이 경우, 하이트가 44(automaticDimension)임을 표기해주는 것으로 해결했습니다.


    또한 아이패드의 경우... 테이블뷰의 컨텐츠를 보기 편하게 해주려고 약간 여백(?)을 주는 게 디폴트로 설정되어있다는 것을 알았습니다. 그 결과..

    안 이쁜 여백이 생겨버리고 만 것이죠..

    이건 이 옵션을 꺼 버리는 방법으로 처리했습니다.


       tableView.cellLayoutMarginsFollowReadableWidth = false

         



    두개를 손봐 준 결과 유아이가 깨지지 않았습니다.

Designed by Tistory.