인프런 커뮤니티 질문&답변
Drawing Cycle 관련 질문
작성
·
30
·
수정됨
0
안녕하세요, 강의 늘 잘 듣고 있습니다.
다름이 아니라, 뷰의 레이아웃을 잡아주는 과정에서 Drawing Cycle & 생성자 중 어디에 무엇을 작성해야 할지 헷갈려서 개인적으로 알아보던 중 궁금증이 생겨서 질문드립니다!
Drawing Cycle에 맞추어 뷰 업데이트하는 몇가지 예시
init(생성자)
subview 추가 (addSubview, stackView.addArrangedSubview)
제약 생성 + NSLayoutConstraint.activate (1회)
정적인 스타일(폰트, 색, axis, spacing 등)
즉, ‘한번 바뀌고 안 바뀔 것들’을 세팅해 준다.
updateConstraints()
상태에 따라 레이아웃이 바뀔 때 (expanded/collapsed, 이미지 크기 토글, padding 변경, 어떤 뷰 숨김에 따른 높이 변경)
constraint를 프로퍼티로 보관해두고
updateConstraints()에서 constant 바꾸거나 isActive 토글
필요 시 setNeedsUpdateConstraints() 호출
즉, ‘동적으로 바뀔 레이아웃’을 세팅해 준다.
layoutSubviews()
frame이 계산된 뒤의 후처리를 수행해줘야 할 때 (그림자 경로, cornerRadius 등 frame의 정보가 필요한 것들)
먼저 제가 정리한 바는 다음과 같습니다.
그런데, constraint를 updateConstraint() Drawing Cycle 내에서 지정해주는 강의 내 파트와 살짝 충돌이 발생하더라구요.
GPT 및 개인적인 공부를 통해 확인했을 때에는,
'constraint가 여러번 중복 적용될 수도 있으므로, 동적으로 constraint를 변경할 상황이 아니라면 생성자에서 초기화해주는 것이 좋다'라고 이해했습니다.
동적으로 변경되지 않는 기본 레이아웃 제약은 생성자에서 설정하는 것이 원칙적으로 더 적절한지,
아니면 updateConstraints()에서 설정하는 방식도 올바른 패턴인지 궁금합니다.
어떤 방식이 더 권장되는지 명확히 알고 싶습니다..!
답변 1
1
네 안녕하세요 taehun0933 님.
아마 강의 내에서 제가 여러가지를 이론적으로 설명을 드리면서 다양한 가능성에 대한 설명을 먼저 드려서.. 조금 헷갈리실 수도 있을 것 같은데 (기본적으로 동적으로 변하는 상황이 드물기 때문에) 생성자에서 하시면 된다고 보시면 됩니다. :)
==> '동적으로 constraint를 변경할 상황이 아니라면 생성자에서 초기화해주는 것이 좋다'라고 정확하게 이해하셨습니다.
감사합니다. :)






확인했습니다. 답변 감사드립니다!