👋 들어가기 전
우리는 지난 포스팅에서 intrinsicContentSize에 대해서 알아봤다.
이번에는 intrinsicContentSize에 대한 우선순위를 지정할 수 있는 방법을 알아보자.
✊ 왜 필요할까??
먼저 다음 코드를 보자.
label1.text = "첫번 째 레이블입니다."
label2.text = "두번 째 레이블입니다."
label1.backgroundColor = .green
label2.backgroundColor = .red
view.addSubview(label1)
view.addSubview(label2)
NSLayoutConstraint.activate([
label1.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor),
label1.topAnchor.constraint(equalTo: view.topAnchor, constant: 40),
label2.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor),
label2.topAnchor.constraint(equalTo: view.topAnchor, constant: 40)
])
UILabel은 intrinsicContentSize이 있기때문에 top과 leading 또는 trailing만 지정해도 문제가 크게 없다.
결과를 살펴보자.
흠.. 크게 문제가 없어 보인다.. ? 첫번째 레이블의 trailing 제약조건을두번째 레이블의 leading에
붙혀보면 어떨까?
두번 째 레이블이 멋대로 늘어나는 현상이 벌어진다???
두번 째 레이블의 가 깨져버렸다는 뜻이다.
전혀 예상하지 못한 동작이다.
개발자가 예상하지 못한 상황은 절대 환영할 만한 상황이 아니다.
그러면 결국 우리는 저런 상황에서 우리가 예상할 수 있게 건드려줘야하는데
바로 그게 이번 시간 학습할 priority다.
☝️ Content Hugging Priority
Hugging Priority는 둘 중하나는 커져야한다면 intrinsicContentSize를 누가 포기할 것인가??
즉, 우선순위가 높으면 intrinsicContentSize를 유지 낮은 놈이 늘어난다는 뜻
그러면 위에서 따로 우선순위를 정하지 않았는데 오른쪽이 늘어났을까??
우선 순위가 같을경우에 수평에서는 왼쪽이 우선 , 수직에서는 위가 우선적으로 intrinsicContentSize를
유지하려는 경향이 있다.
label2.setContentHuggingPriority(.defaultHigh, for: .horizontal)
다음과 같이 label2의 수평 우선순위를 높히니깐 왼쪽에 있는 label1이 늘어나는 것을 볼 수 있다.
✌️ Content Compression Resistance Priority
Sets the priority with which a view resists being made smaller than its intrinsic size.
Compression Resistance Priority는 Hugging과 정 반대다.
둘 중하나는 작아져야한다면 intrinsicContentSize를 누가 포기할 것인가??
즉, 우선순위가 높으면 intrinsicContentSize를 유지 낮은 놈이 작아진다는 뜻
다음 코드를 적용해보자.
label2.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
label2을 크기를 유지하게 설정하니깐 왼쪽 레이블이 작아지며 내용이 짤린다.
😀 소감 및 마무리
언젠가 꼭 정리해야 됐는데 이번 시간에 빠르게 적용해보니깐 생각보다 별거 아니네 ㅋㅋ
Hugging | Compression Resistance | |
낮아지면 | 커진다. | 작아진다. |
높히면 | intrinsicContentSize를 유지하려한다. |
출처
'iOS > UIKit' 카테고리의 다른 글
PhotoPicker 최적화하기 (4) | 2024.12.29 |
---|---|
IntrinsicContentSize (1) | 2024.12.15 |
Auto Layout이란 (0) | 2024.12.15 |
특정 시기에 아이콘 자동 변경하기 (0) | 2024.10.26 |
iOS Cache (7) | 2024.10.17 |