티스토리 뷰

UIView 내의 레이아웃 관련 메소드인 layoutIfNeeded()와 setNeedsLayout(). 두 메서드 모두 layoutSubViews()를 호출하는 메소드이다. 먼저, layoutSubViews()에 대해 알아보자.

* layoutSubviews()
- 서브 뷰들을 배치한다.

- 기본 구현에서는 서브 뷰 들의 크기와 위치를 결정하기 위해 설정한 제약조건을 사용한다. (iOS 5.1보다 상위 버전에서)

- 서브 뷰의 정확한 레이아웃을 배치하기 위해 재정의하여 사용 할 수 있다.(서브 뷰의 프레임 사각형을 직접 설정할 수 있다)

- 서브 뷰의 오토 리사이징과 제약 조건 기반 동작이 원하는 동작을 제공하지 않는 경우에만 재정의하여 사용해야한다)

- 이 메소드를 직접 호출하면 안되고, setNeedsLayout()이나 layoutIfNeeded()를 사용하여 호출해야 한다.

그렇다면 setNeedsLayout() 와 layoutIfNeeded() 간의 어떤 차이점이 있을까?

1. layoutIfNeeded()
- 뷰의 layoutIfNeeded를 호출하면 해당 뷰의 레이아웃을 강제로 즉시 갱신시킨다. 

- 오토레이아웃을 사용할 때, 레이아웃 엔진은 필요에 따라 뷰의 위치를 업데이트하여 제약조건의 변경 사항을 충족시킨다. 

루트 뷰에서 시작하는 뷰의 서브 트리를 배치한다.

- 만약, 보류 중인 레이아웃 갱신사항이 없는 경우, 이 메소드는 레이아웃을 변경하거나 관련 콜백을 호출하지 않고 종료한다.



2. setNeedsLayout()

- 리시버의 현재 레이아웃을 무효화하고 다음 업데이트 주기 동안 레이아웃 업데이트를 트리거 한다.


- 이 메소드는 요청을 기록하고 즉시 리턴한다. 


- 강제로 즉시 업데이트 하는 것이 아니고 다음 업데이트 주기까지 기다리기 때문에, 여러 개의 뷰를 업데이트하기전에 레이아웃을 무효화 할 수 있다.


- 모든 레이아웃 업데이트를 하나의 업데이트 주기로 통합 할 수 있으므로, 성능 향상에 도움이 된다.


* 참고하면 좋은 글


http://tech.gc.com/demystifying-ios-layout/


'iOS > Simple Knowledge' 카테고리의 다른 글

More Accessible in iOS  (0) 2018.02.23
UIModalPresentationStyle  (0) 2017.12.27
required init?(coder:)  (0) 2017.12.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함