우선 순위 설정 - priority, setContentCompressionResistancePriority, setContentHuggingPriority
① Priority
AutoLayout 을 구현할 때 hugging Priority, compressionResistancePriority 값을 설정하였을 것이다. SnapKit 에서도 이를 priority 를 통해 줄 수 있다.
button.snp.makeConstraints {
$0.top.equalTo(label.snp.top).priority(600)
}
위와 같이 상수로도 줄 수 있지만, 열거형을 사용하여 low, medium, high 등으로 case 를 구분지어서 priority 를 부여하는 것이 가독성이 높아 보인다.
enum Priority: Int {
case low = 250
case medium = 500
case high = 750
}
② setCompressionResistancePriority
let spacing: CGFloat = 20.0
wordName.setContentCompressionResistancePriority(.init(rawValue: 751), for: .horizontal)
wordName.snp.makeConstraints {
$0.top.leading.equalTo(safeAreaLayoutGuide).inset(spacing)
$0.trailing.equalTo(wordMeaning.snp.leading)
$0.width.equalTo(150)
}
wordMeaning.setContentCompressionResistancePriority(.init(rawValue: 750), for: .horizontal)
wordMeaning.snp.makeConstraints {
$0.top.trailing.equalTo(safeAreaLayoutGuide).inset(spacing)
$0.leading.equalTo(wordName.snp.trailing)
$0.width.equalTo(1000)
}
wordMeaning 의 width 가 1000 이므로 전체 다 차지해야 하지만, compressionResistance 가 wordName 이 더 높기 때문에, wordName 의 width 인 150 이하로는 줄어들지 않는다.
둘의 우선순위를 변경해보자.
같은 결과가 나온다.
"왜"
width 를 equalTo 로 잡고 있는데, 이것이 priority 가 더 높기 때문에 wordName 의 width 가 보장 받는다.
wordName 의 width 의 우선순위를 낮춰보자.
wordName.snp.makeConstraints {
$0.top.leading.equalTo(safeAreaLayoutGuide).inset(spacing)
$0.trailing.equalTo(wordMeaning.snp.leading)
$0.width.equalTo(150).priority(.init(100))
}
③ setContentHuggingPriority
setContentHuggingPriority 는 어떤 컴포넌가 늘어나야 하는 상황일 때 사용한다.
let spacing: CGFloat = 20.0
wordName.setContentHuggingPriority(.init(rawValue: 751), for: .horizontal)
wordName.snp.makeConstraints {
$0.top.leading.equalTo(safeAreaLayoutGuide).inset(spacing)
$0.trailing.equalTo(wordMeaning.snp.leading)
$0.width.equalTo(300)
}
wordMeaning.setContentHuggingPriority(.init(rawValue: 750), for: .horizontal)
wordMeaning.snp.makeConstraints {
$0.top.trailing.equalTo(safeAreaLayoutGuide).inset(spacing)
$0.leading.equalTo(wordName.snp.trailing)
$0.width.equalTo(300)
}
wordName 과 wordMeaning 모두 300 을 주었지만, 둘 중 하나는 늘어나야 한다. wordName 의 contentHuggingPriority 가 wordMeaning 보다 높기 때문에 wordName 이 커지지 않을 저항력이 더 높다. 그러므로 huggingPriority 가 더 낮은 wordMeaning 이 늘어난다.
' iOS > SnapKit' 카테고리의 다른 글
SnapKit 키워드 정리 - 기존 Constraint 값 수정하는 경우 (0) | 2022.10.03 |
---|---|
SnapKit 키워드 정리 - equalTo, offset, inset 등 (1) | 2022.10.03 |
SnapKit 키워드 정리 - Anchor (0) | 2022.10.03 |