[iOS] setContentHuggingPriority, setContentCompressionResistancePriority 개념

ungchun·2022년 8월 10일
0
post-thumbnail

setContentHuggingPriority(_:for:)

공식문서에 나오는 정의는 '뷰가 고유 크기보다 커지는 것을 방지하는 우선 순위를 설정' 즉 더 이상 커지지 않게 합니다.

예를 들면 3개의 라벨을 height값이 300인 vertical stackView에 추가했습니다. stackView은 기본값이 fill 이라서 추가한 3개의 라벨들이 300만큼 채우게 되는데, 여기서 만약 one과 three의 라벨 크기는 유지시키고 싶으면 어떻게 해야할까?

testLabelOne.setContentHuggingPriority(UILayoutPriority(251), for: .vertical)
testLabelTwo.setContentHuggingPriority(UILayoutPriority(250), for: .vertical)
testLabelThree.setContentHuggingPriority(UILayoutPriority(251), for: .vertical)

Hugging의 기본값은 251입니다. 여기서 two 라벨 Hugging 값을 250으로 -1 하면

이렇게 one과 three의 라벨은 본인의 크기를 유지하고 나머지 값을 two 라벨이 채우게 됩니다. 왜냐하면 two라벨의 Hugging값이 나머지 라벨들보다 작기때문이죠.

one, three 라벨 : two 라벨 Hugging값이 여기서 제일 작으니까 two 길이 (크기) 늘려 ~


setContentCompressionResistancePriority(_:for:)

공식문서에 나오는 정의는 '뷰가 고유 크기보다 작게 만들어지지 않도록 하는 우선 순위를 설정' 즉 더 이상 작아지지 않게 합니다.

예를 들면 이렇게 두개의 라벨을 horizontal stackView에 추가했습니다. 보시다시피 one라벨 뒤에 택스트가 넘어가서 ... 이라고 적혀있는걸 확인할 수 있습니다. 여기서 만약 one 라벨의 값들을 보이게 하고 싶으면 어떻게 해야할까?

testLabelOne.setContentCompressionResistancePriority(UILayoutPriority(750), for: .horizontal)
testLabelTwo.setContentCompressionResistancePriority(UILayoutPriority(749), for: .horizontal)

CompressionResistance의 기본값은 750입니다. 여기서 two 라벨 CompressionResistance 값을 -1 하면

이렇게 one라벨의 값은 다 보이고 two라벨의 값이 ... 이라고 적혀있는걸 확인할 수 있습니다. 왜냐하면 two라벨의 CompressionResistance값이 one라벨보다 작기때문이죠.

one 라벨 : two 라벨 CompressionResistance값이 나보다 작으니까 two라벨 값 말고 우선 내꺼 다 보여줘 ~


Hugging : 뷰가 더 길어져야 하는 상황에서 어떤 뷰가 길어지지 않게 할지에 대한 기준이 필요할 때
CompressionResistance : 뷰가 더 작아져야 하는 상황에서 어떤 뷰가 더 작아져야 하는 기준이 필요할 때

0개의 댓글