Auto Layout에서의 “우선순위”란?
뷰의 크기를 정할 때 iOS가 묻는다.
💬 “이 뷰는 얼마나 본인의 크기를 지키고 싶어하나요?”
이 질문에 답하는 게 두 가지 우선순위이다.
왜 우선순위가 필요할까?
예를 들어, 이런 상황을 보자.
[ "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 |