관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] setContentHuggingPriority, setContentCompressionResistancePriority 개념 본문

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이 커져야 하는데, 어떤것을 고유 크기보다 커지지 않도록 할지 정해지지 않은 상태

StackView의 너비관련 constraint 설정

  • 시스템에서 오류에 대해 제안: 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

Comments