[iOS] Auto Layout 우선순위(Priority)

2025. 6. 24. 15:34·📱 iOS
-->

 

Auto Layout에서의 “우선순위”란?


뷰의 크기를 정할 때 iOS가 묻는다.

💬 “이 뷰는 얼마나 본인의 크기를 지키고 싶어하나요?”

 

이 질문에 답하는 게 두 가지 우선순위이다.

Priority

 

 

왜 우선순위가 필요할까?


예를 들어, 이런 상황을 보자.

[ "Author" ][     J.K Rowling     ]

"Author"는 고정 텍스트고, "J.K Rowling"은 바뀔 수 있는 값이라 가정하자.

→ 만약 두 라벨 사이 공간이 부족하면? 누굴 줄일까?

 

이럴 때 우선순위(priority)를 지정해줘야 하는 것이다.

 

예시 코드

let authorTitleLabel = UILabel() // Author
let authorContentLabel = UILabel() // 저자(J.K Rowling)

authorTitleLabel.setContentHuggingPriority(.required, for: .horizontal)
authorTitleLabel.setContentCompressionResistancePriority(.required, for: .horizontal)

authorContentLabel.setContentHuggingPriority(.defaultLow, for: .horizontal)
authorContentLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
.required는 우선순위 1000 / .defaultLow는 우선순위 250
우선순위는 1~1000 사이의 정수이며, 숫자가 클 수록 우선순위가 높다는 것을 의미한다.

 

authorTitleLabel (“Author”)

  • Hugging: 1000 → “내 크기만큼만 있을래, 넓어지기 싫어”
  • CompressionResistance: 1000 → “작아지고 싶지 않아, 글자 안 잘리게 해줘!”

즉, 절대 넓어지지도, 줄어들지도 마!

이건 텍스트가 잘리면 안 되는 고정 정보니까 이렇게 처리함.

 

authorContentLabel (“J.K Rowling”)

  • Hugging: 250 → “내가 좀 넓어져도 괜찮아”
  • CompressionResistance: 250 → “필요하면 작아져도 돼요”

즉, 공간이 모자라면 이 라벨이 넓이 조절을 감수함.

이건 사용자 입력 값처럼 가변적인 정보니까 줄어들어도 어색하지 않음.

 

 

우선순위를 안주면 어떻게 될까?


우선순위를 안주면 iOS는 둘 다 똑같이 중요하다고 생각하게 되고, 공간이 부족하면 랜덤하게 누군가 줄어들어, 결과적으로 텍스트가 잘릴 수도 있다.

 

그걸 방지하기 위해 우선순위를 명확히 설정해야 하는 것이다.

 

 

눈으로 보기 쉽게 설명


[ "Author" ][     J.K Rowling     ]
   ↑ 고정됨     ↑ 공간에 따라 넓어지거나 줄어듬
  • "Author"는 우선순위가 높아서 자기 크기 고정
  • "J.K Rowling"은 우선순위가 낮아서 자동 조절

 

자주 쓰는 우선순위 값들


  • .required → 1000(절대적)
  • .defaultHigh → 750
  • .defaultLow → 250

필요하면 직접 UILayoutPriority(900) 이런 식으로 값을 명시해 줄 수 있다.

 

✅ 요약


  • Hugging Priority (늘어나기 싫어함): 값이 클수록 뷰는 자기 크기를 유지하고 넓어지지 않으려 함
  • Compression Resistance Priority (줄어들기 싫어함): 값이 클수록 뷰는 작아지지 않으려 함
  • 우선순위를 안주면 랜덤하게 잘림 → 꼭 설정하자
// 고정 텍스트: 커지거나 작아지지 않게
label1.setContentHuggingPriority(.required, for: .horizontal)
label1.setContentCompressionResistancePriority(.required, for: .horizontal)

// 바뀔 수 있는 값: 상황에 따라 넓어지거나 줄어들게
label2.setContentHuggingPriority(.defaultLow, for: .horizontal)
label2.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)

 

 

'📱 iOS' 카테고리의 다른 글

[iOS] SnapKit의 제약 설정 메서드 + 예시 코드  (0) 2025.07.02
[iOS] UILabel 주요 속성 정리  (0) 2025.06.25
[iOS] Auto Layout - UIScrollView와 LayoutGuide 정리  (0) 2025.06.23
CodingKey로 JSON 키 매핑하기  (0) 2025.06.19
Xcode에서 시뮬레이터 추가하는 방법  (0) 2025.06.18
'📱 iOS' 카테고리의 다른 글
  • [iOS] SnapKit의 제약 설정 메서드 + 예시 코드
  • [iOS] UILabel 주요 속성 정리
  • [iOS] Auto Layout - UIScrollView와 LayoutGuide 정리
  • CodingKey로 JSON 키 매핑하기
MoriOS
MoriOS
기억하기 위해 기록하는 공간 🖋️
  • MoriOS
    MoriOS
    MoriOS
  • 전체
    오늘
    어제
    • 분류 전체보기 (67)
      • 📌 Swift (12)
      • 📱 iOS (11)
      • 💡 Algorithm (1)
      • ❕Data structure (4)
      • 🪙 Python (0)
      • ⚙️ Git (3)
      • 🖋️ TIL Journal (33)
      • 📝 Etc (3)
  • 블로그 메뉴

    • GitHub
  • 인기 글

  • 태그

    swift optional
    cow 값 타입
    SnapKit
    updateconstraints
    제약조건 변경
    Optional
    prepareconstraints
    uikit
    GitHub
    swift cow
    제약조건 수정
    스크롤 길이
    static
    cow 쓰기 복사
    Codable
    커밋 이모지
    git moji
    makeconstraint
    프로그래머스
    셀 높이
    후행클로저
    ios
    remakeconstraints
    Split
    weak
    cow 참조 타입
    swift
    TiL
    커밋 아이콘
    Components
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
MoriOS
[iOS] Auto Layout 우선순위(Priority)
상단으로

티스토리툴바