이전 포스팅에서 systemLayoutSizeFitting을 사용하여 dynamic cell sizing 하는 방법에 대해 알아보았습니다.
2020/10/29 - [UIKit] - [UIKit] Dynamic cell sizing - systemLayoutSizeFitting
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 적용
그리고 실행하면...?
위와 같이 원치 않은 결과가 나오는 것을 확인할 수 있습니다.
딱 맞게 값들을 설정했는데, 왜 이런 결과가 나오는 것일까요~?
바로 height를 45.5에 맞는 Size 계산을 요청했지만 실제 계산된 값은 45.666으로 오차가 발생했기 때문입니다.
소수점 단위의 계산 오차로 인하여 실제 원하는 높이보다 살짝 큰 사이즈가 되었으며,
inset / spacing 에 따라 ColllectionView 총높이보다 커지게 되면서 한 줄로 나오게 된 것입니다.
따라서 코드를 위와 같이 동적으로 필요한 width 값만 계산된 값으로 사용하는 방법이 있습니다.
결론
- systemLayoutSizeFitting을 사용하여 Size를 구할 경우, 소수점 단위에서는 오차가 발생할 수 있으니 이를 인지하고 조심하자
감사합니다.
'UIKit' 카테고리의 다른 글
[UIKit] LSP 위반 케이스 (Forced Unwrapping의 위험성) (0) | 2021.06.05 |
---|---|
[UIKit] Dynamic cell sizing - systemLayoutSizeFitting (1) | 2020.10.29 |
[UIKit] CollectionView - cell reuse시 주의해야 할 점 (0) | 2020.10.26 |
[UIKit] Generic Cell Configurator (3) | 2020.03.22 |
[UIKit] UITableView의 indexPathForRow(at:) 오차에 대한 디버깅 (2) | 2020.03.16 |