본문 바로가기

UIKIT

setContentHuggingPriority, setContentCompressionResistancePriority

setContentHuggingPrioritysetContentCompressionResistancePriorityAuto Layout에서 뷰의 크기 우선순위를 제어하는 속성입니다. 두 속성은 UI 요소가 확장되거나 축소될 때 그에 맞게 동작을 결정합니다.

 

1. setContentHuggingPriority

뷰가 더 커지려고 할 때 저항하는 우선순위입니다.
뷰가 자신의 콘텐츠 크기를 유지하려고 할 때 얼마나 저항할지 설정합니다.

  • 높은 우선순위를 주면 뷰가 더 커지는 것을 방지합니다.
  • 낮은 우선순위의 뷰는 확장될 가능성이 높아집니다.
imageView.setContentHuggingPriority(.required, for: .horizontal)

 

  • imageView는 수평 방향(.horizontal)에서 최대한 자신의 콘텐츠 크기를 유지하려고 합니다.
  • 다른 뷰들이 확장될 때 imageView는 확장되지 않으려 합니다.

 

2. setContentCompressionResistancePriority

뷰가 더 작아지려고 할 때 저항하는 우선순위입니다.
뷰가 자신의 콘텐츠가 잘리지 않도록 유지하려고 할 때 얼마나 저항할지 설정합니다.

  • 높은 우선순위를 주면 뷰가 축소되는 것을 방지합니다.
  • 낮은 우선순위의 뷰는 더 쉽게 축소됩니다. 
imageView.setContentCompressionResistancePriority(.required, for: .horizontal)
  • imageView수평 방향(.horizontal)에서 자신의 콘텐츠가 잘리는 것을 막기 위해 강력하게 저항합니다.

요약

  • setContentHuggingPriority: 뷰가 확장되는 것을 방지합니다.
  • setContentCompressionResistancePriority: 뷰가 축소되는 것을 방지합니다.

두 속성을 조절하면 UILabel이나 UIImageView 같은 뷰들이 Auto Layout 제약 조건 하에서 의도한 크기와 배치를 유지할 수 있습니다.

 

 

UILayoutPriority

UILayoutPriority는 뷰의 Auto Layout 동작을 조절하기 위한 우선순위 값입니다.

우선순위는 0부터 1000까지의 범위를 가지며, 숫자가 클수록 더 높은 우선순위를 의미합니다.

기본적으로 제공되는 값들:

  1. .required (1000) :
    1. 가장 높은 우선 순위, 뷰가 확장되거나 축되지 않도록 강력하게 저항합니다. 
    2. 주로, 특정 뷰의 크기를 절대적으로 유지해야 할 때 사용합니다.
  2. .defaultHigh (750):
    1. 기본적으로 높은 우선순위입니다. 
    2. 뷰는 자신의 콘텐츠 크기를 유지하려고 하지만, 다른 뷰의 요구에 따라 조정됩니다. 
  3. .defaultLow (250):
    1. 기본적으로 낮은 우선순위입니다. 
    2. 뷰는 콘텐츠 크기를 유지하려는 우선순위가 낮기 때문에 쉽게 확장될 수 있습니다.
    3. 스택뷰와 같은 레이아웃에서 주로 남은 공간을 채우는 역할을 할 때 사용됩니다.
  4. .fittingSizeLevel (50):
    1. 가장 낮은 우선순위입니다. 
    2. 주료 뷰의 크기를 최소화하는 상황에서 사용됩니다. 
    3. 뷰의 크기를 최소로 유지하려는 상황에 유용합니다. 

 

우선순위 숫자를 커스텀 설정하기

숫자 값으로도 커스텀 우선순위를 설정할 수 있습니다.
UILayoutPriority는 rawValue를 통해 숫자로 정의됩니다.

label.setContentHuggingPriority(UILayoutPriority(500), for: .horizontal)