개발콩블로그
[iOS] Hugging Priority, Compression Resistance Priority 본문
안녕하세요!
개발콩입니다. 오늘은 Hugging Priority, Compression Resistance Priority에 대해서 알아보도록 하겠습니다!!
먼저 이 두 개념이 왜 필요한지 알기 위해서는 intrinsicContentSize에 대해 먼저 이야기 하겠습니다.
intrinsicContentSize란
뷰 자체의 속성만을 고려하여 수신 뷰의 "natural size"를 나타냅니다.
👉 뷰 자체의 속성만을 고려하여 레이아웃 시스템에 제공되는 뷰의 "고유 크기"를 정의하는 것
대표적으로 UILabel, UIButton, UISwitch, UITextField가 있습니다.
위의 4가지의 View는 width, height을 설정하지 않아도 intrinsicContentSize로 자동으로 설정되는 것을 볼 수 있습니다.
Hugging Priority, Compression Resistance Priority를 왜 알아야할까?
우리는 특히, UILabel의 width를 지정해 주지 않은 체로 AutoLayout을 잡게될 경우
UILabel의 text의 길이에 따라 width가 정의되는 경험을 한 적이 있습니다.
하지만, 만약 두 개의 UILabel의 horizontal layout이 서로를 계산하고 있는 상황이면 어떻게 될까요?
노랜색 UILabel은 민트색 UILabel과 서로 20의 간격을 유지하고 싶습니다.
하지만 두 UILabel은 고유의 사이즈 width를 갖고 있는 상태이기 때문에 원하는 20의 간격을 맞출 수 없는 상황입니다.
바로 이때, Hugging Priority, Compression Resistance Priority를 이용할 수 있습니다.
Hugging Priority란?
View가 본래 크기보다 커지는 것을 방지하는 우선 순위를 설정하는 것
즉, 공간이 남을 때 무엇이 커질 지, 유지할지 결정하는 것
언제 필요할까?
노랜색 UILabel과 민트색 UILabel은 서로 20의 간격을 유지하고 싶습니다.
하지만 두 UILabel은 고유의 사이즈 width를 갖고 있는 상태이기 때문에 원하는 20의 간격을 맞출 수 없는 상황입니다.
이렇게 공간이 남을 경우에 본래의 크기보다 커지는 것을 방지하는 우선순위를 설정하는 것입니다.
위의 사진에서 노란색 UILabel의 Hugging Priority를 민트색 UILabel보다 높은 값으로 설정하겠습니다.
노란색 UILabel은 본인의 고유 크기를 잘 유지하고 있고, 민트색 UILabel은 본인의 고유 크기보다 커진 것을 볼 수 있습니다.
👉 Hugging Priority가 높다는 것은 난 내 크기 유지하겠다. 다른 UILabel이 고유 크기를 포기해서라도 키워라!
Compression Resistance Priority란?
뷰가 본래 크기보다 작아지는 것을 방지하는 우선순위를 설정하는 것
즉, 공간이 부족할 때 무엇이 줄어들고 유지할지 결정하는 것
언제 필요할까?
UILabel의 간격은 아래와 같이 주어진 상황입니다.
하지만, 두 UILabel은 고유의 사이즈 width가 너무 크기 때문에
공간이 부족하여 원하는 20의 간격을 맞출 수 없는 상황입니다.
이렇게 공간이 부족한 경우에 본래의 크기보다 커지는 것을 방지하는 우선순위를 설정하는 것입니다.
위의 사진에서 노란색 UILabel의 Compression Resistance Priority를 민트색 UILabel보다 높은 값으로 설정하겠습니다.
노란색 UILabel은 본인의 고유 크기를 잘 유지하고 있고, 민트색 UILabel은 본인의 고유 크기보다 작아 진 것을 볼 수 있습니다.
👉 Compression Resistance Priority가 높다는 것은 난 내 크기 유지하겠다. 다른 UILabel이 고유 크기를 포기해서라도 작게해라!
제 결론 및 느낀점
Hugging Priority, Compression Resistance Priority를 고려하는 기준을 다음과 같이 잡으면 좋을 것 같습니다.
- 두 개 이상의 UILabel이 서로를 기준으로 Layout을 잡는가?
- UILabel의 width를 지정하지 않고 intrinsicContentSize로 설정되어있는가?
- 두 UILabel의 text의 값이 빈번하게 바뀌어 intrinsicContentSize가 계속 바뀌는가?
이 3가지의 기준에 부합한다면 Hugging Priority, Compression Resistance Priority를 고려해야할 것 같습니다.
공간이 남는 경우에는 - Hugging Priority를 고려하고
공간이 부족한 경우에는 - Compression Resistance Priority를 고려할 것 같습니다.
하지만, 시간과 날짜와 같이 일정한 길이의 text가 들어오게 될 경우에는
고정된 width를 주는 것이 조금 더 직관적이고 쉬운 방법이라고 생각합니다.
Hugging Priority, Compression Resistance Priority를 사용하는 것은 물론 좋지만
상황에 따라 적절하게 잘 적용하는 것이 더 현명할 것 같습니다.
'iOS' 카테고리의 다른 글
[iOS] Image Resize & DownSampling을 통한 최적화 (0) | 2025.01.21 |
---|---|
[iOS] UICollectionView 동적 크기 Cell 만들기 (1) | 2025.01.18 |
[iOS] 키보드에 따른 Layout 설정하기 - Keyboard Layout Guide (0) | 2025.01.11 |
[iOS] View Controller Life Cycle - 뷰 컨트롤러 생명주기 (1) | 2025.01.07 |
[iOS] App’s Life Cycle (0) | 2024.12.30 |