question,image,options 간의 간격이 너무 커서 가독성이 떨어지는 문제및 각 부분의 충돌 현상 해결
문제의 원인은
아래와 같은 세 제약 조건을 수학적으로 동시에 만족할게 할수가 없었기 때문입니다.
1.이미지뷰까지 20포인트 간격
2.질문 레이블에서 옵션 스택뷰까지 10포인트 간격
3.이미지뷰에서 옵션 스택뷰까지 20포인트 간격
해결방법은:
다음과 같은 제약 조건 변수들을 선언합니다
private var questionToOptionsConstraint: NSLayoutConstraint!
private var questionToImageConstraint: NSLayoutConstraint!
private var imageToOptionsConstraint: NSLayoutConstraint!
setupConstraints() 메서드에서 이 제약 조건들을 초기화하되, 아직 활성화하지 않습니다.
questionToOptionsConstraint = optionsStackView.topAnchor.constraint(equalTo: questionLabel.bottomAnchor, constant: 10)
questionToImageConstraint = imageView.topAnchor.constraint(equalTo: questionLabel.bottomAnchor, constant: 20)
imageToOptionsConstraint = optionsStackView.topAnchor.constraint(equalTo: imageView.bottomAnchor, constant: 20)
displayQuestion() 메서드에서 이미지 유무에 따라 적절한 제약 조건만 활성화합니다
// 먼저 모든 잠재적 충돌 제약 조건을 비활성화
NSLayoutConstraint.deactivate([
questionToOptionsConstraint,
questionToImageConstraint,
imageToOptionsConstraint
])
if 이미지가_있는_경우 {
// 이미지 관련 제약 조건만 활성화
NSLayoutConstraint.activate([
questionToImageConstraint,
imageToOptionsConstraint
])
} else {
// 이미지 없이 직접 질문-옵션 연결 제약 조건만 활성화
NSLayoutConstraint.activate([
questionToOptionsConstraint
])
}
이런 방식으로 이미지가 있을 때는 일반적인 간격을 유지하고, 이미지가 없을 때는 질문과 옵션 사이의 간격을 줄여 가독성을 높일 수 있었습니다.
댓글
댓글 쓰기