iOS 기본 (swift)
[iOS - swift] setContentHuggingPriority, setContentCompressionResistancePriority 개념
jake-kim
2021. 8. 22. 23:01
setContentHuggingPriority

- 뷰가 고유 크기보다 커지는 것을 방지하기위해 우선 순위를 설정하는것
- 커지지 않게 하다 = "Hugging"
setContentCompressionResistancePriority

- 뷰가 고유 크기보다 작게 되는것을 방지하기위해 우선 순위를 설정하는것
- 작게 되지 않게 하다 = "CompressionResistance"
예제
- StackView안에 lable2개가 있지만 stackView의 너비가 autolayout으로 잡혀있지 않아서 동적으로 늘어나는 경우는 필요없는 상황

- StackView의 너비가 정해진 상황 > stackView의 alignment = .fill이 디폴트설정되어 있으므로, 두 label이 커져야 하는데, 어떤것을 고유 크기보다 커지지 않도록 할지 정해지지 않은 상태

- 시스템에서 오류에 대해 제안: hugging의 우선순위를 주어서 어떤 label이 intrinsic content size보다 커지지 않게 할지 결정

- leftLabel의 hugging값을 높인 경우: 왼쪽으로 당겨옴 > 왼쪽의 label을 intrinsic content size보다 커지지 않도록 설정했기 때문에 오른쪽의 view가 intrinsic content size보다 커지게 된것

- rightLabel의 intrinsic content size를 늘릴 경우 > 에러

- 에러: 시스템에서 CompressionResistance 우선순위를 정하게끔 제안: hugging을 통해 고유 크기보다 커지는것을 방지하는 우선순위를 정했지만, 어떤것을 고유 크기보다 작지 않도록 하는 우선순위가 정해지지 않은 상태

- compressionResistance설정
| leftLabel > rightLabel | leftLabel < rightLabel |
![]() |
![]() |
정리
- Hugging > intrinsicContentSize보다 뷰가 더 길어져야 하는 상황에서 어떤 뷰가 길어지지 않게 할지에 대한 기준이 필요할때
- compressionResistance > intrinsicContentSize보다 뷰가 더 작아져야 하는 상황에서 어떤 뷰가 더 작아져야 하는 기준이 필요할때
- 핵심: 뷰와 intrinsic content size 간의 비교
참고
- https://developer.apple.com/documentation/uikit/uiview/1622485-setcontenthuggingpriority
- https://developer.apple.com/documentation/uikit/uiview/1622526-setcontentcompressionresistancep

