[Swift][UIKit] UpdateViewConstraints()에 대하여

Uno·2021년 8월 20일
2

UIKit

목록 보기
1/9

공식문서에 다음과 같이 설명하고 있습니다.

Called when the view controller’s view needs to update its constraints.
“뷰 컨트롤러의 뷰의 제약조건을 업데이트할 필요가 있을 때, 호출하는 메소드이다.”

Declaration
func updateViewConstraints()

정의는 이렇게 되겠지만,

이 메소드를 커스텀하기 위해서는 override 를 통해서 사용합니다.

override func updateViewConstraints() { ... }

실제 코드에서 사용하면 이런 모습일겁니다.

이 코드 블럭 내에 원하시는 UI 구현(오토레이아웃의 제약조건) 을 추가해주면 됩니다.

그러면 자동으로 오토레이아웃이 업데이트 되느냐?

아닙니다.

아직 OS 입장에서는 주문서를 받지 못했습니다.

그러니까

updateViewConstraints() 내부에 코드를 작성하는 것은

“주문서” 를 작성하는 단계입니다.

OS에게 주문서를 “전달” 해주는 과정이 필요하죠.

그 과정이 setNeedsUpdateConstraints() 메소드를 호출하는 겁니다.

view.setNeedsUpdateConstraints()

이렇게 호출되겠죠?

그러면 이제 제가 작성한 주문서가 OS에 전달되고 OS에서 updateViewConstraints() 의 코드블럭 테스크를 처리하고 업데이트 하여 뷰에 보여줍니다.

정리해보면

동작전)
updateViewConstraints() 에 업데이트될 상세구현이 작성되어 있음

특정 리스폰스 혹은 시점)
원하는뷰.setNeedsUpdateConstraints() 를 호출
-> OS 에 업데이트의 필요성을 전달. -> OS에서 updateViewConstraints() 테스트 처리
-> 뷰 업데이트

위와 같은 순서로 로직이 동작합니다.

각각의 메소드를 역할로 설명하면 다음과 같습니다.

  • updateViewConstraints() : 제약조건 업데이트 될 상세 내용 작성
  • setNeedsUpdateConstraints() : 제약조건 업데이트 스케쥴링 추가

여기서 만약

updateViewConstraints() 내부에 setNeedsUpdateConstraints() 를 작성하면,

무한히 두 메소드가 호출되겠죠. 이부분에 유의합시다!

profile
iOS & Flutter

0개의 댓글