본문 바로가기

UIKit

[UIKit] systemLayoutSizeFitting 사용 시, 주의 사항

반응형

이전 포스팅에서 systemLayoutSizeFitting을 사용하여 dynamic cell sizing 하는 방법에 대해 알아보았습니다.

 

2020/10/29 - [UIKit] - [UIKit] Dynamic cell sizing - systemLayoutSizeFitting

 

[UIKit] Dynamic cell sizing - systemLayoutSizeFitting

TableView/CollectionView를 포함하여 일반적인 View 사용 시, 텍스트 등의 내부 컨텐츠를 바탕으로 사이즈 구성이 필요한 경우가 있습니다. 이런 경우에는 Layout Constrains를 기반으로 뷰의 사이즈를 계산

ntomios.tistory.com

 

systemLayoutSizeFitting에 대한 개념, 사용 방법에 대해 궁금하시면, 위 포스팅 내용을 참고하시면 됩니다~

 

이번 포스팅에서는 systemLayoutSizeFitting 사용 시, 주의 사항에 대해 다루고자 합니다.

 

먼저 이전 포스팅에서 다룬 CollectionView를 한 줄 가로 스크롤에서, 두 줄 가로 스크롤로 변경하여 테스트를 진행하겠습니다.

 

두 줄 가로 스크롤로 변경 결과

 

CollectionView는 다음과 같이 설정되어 있습니다.

collectionView height = 110
minimumLineSpacing = 10
minimumInteritemSpacing = 16
sectionInset = (top: 5, left: 16, bottom: 5, right: 16)
cell height = 45 // systemLayoutSizeFitting 적용

 

위 정보를 그림으로 표현하면 다음과 같습니다.

위와 같이 평온한 상황에서 디자인이 일부 변경되어 CollectionView 설정을 다음과 같이 변경해야 한다고 하겠습니다.

collectionView height = 111
minimumLineSpacing = 10
minimumInteritemSpacing = 16
sectionInset = (top: 5, left: 16, bottom: 5, right: 16)
cell height = 45.5 // systemLayoutSizeFitting 적용

 

 

 

그리고 실행하면...?

UI Debug 캡쳐

위와 같이 원치 않은 결과가 나오는 것을 확인할 수 있습니다.

 

딱 맞게 값들을 설정했는데, 왜 이런 결과가 나오는 것일까요~?

 

사이즈 계산 오차

바로 height를 45.5에 맞는 Size 계산을 요청했지만 실제 계산된 값은 45.666으로 오차가 발생했기 때문입니다.

 

소수점 단위의 계산 오차로 인하여 실제 원하는 높이보다 살짝 큰 사이즈가 되었으며,

 

inset / spacing 에 따라 ColllectionView 총높이보다 커지게 되면서 한 줄로 나오게 된 것입니다.

 

따라서 코드를 위와 같이 동적으로 필요한 width 값만 계산된 값으로 사용하는 방법이 있습니다.

 

 

결론

  • systemLayoutSizeFitting을 사용하여 Size를 구할 경우, 소수점 단위에서는 오차가 발생할 수 있으니 이를 인지하고 조심하자

 

 

감사합니다.

 

 

 

 

반응형