Safe Area 와 View Life Cycle

민경준·2022년 11월 8일
0

Safe Area Guide 를 따르기 위해 검색을 통해 View 가 SafeArea 를 침범하지 않도록 적용하는 법에 대해서 공부를 하고 있었다.

https://devmjun.github.io/archive/SafeArea_1

Mjun 님이 번역하여 올려 두신 글을 참고하여 앱에 적용시켜 봤는데 아무리 해도 safe area 의 값이 넘어오지 않았다.

print("Safe Area Top Height: ", self.view.safeAreaInsets.top)
// 0.0

그래서 처음 생각해낸 것이 스토리보드에서 강제적으로 Safe Area의 Top Edge와 Bottom Edge에 Alignment Constraints를 맞춰주는 것 이지만 이 방법으로도 되지 않았다.

두번째로 생각한 것이 View 의 UI 관련 함수를 viewDidLoad() 에 넣어 두었었는데, View 의 값들이 정의되지 않았기 때문에 값이 넘어오지 않았을까 생각했다.

viewWillAppear()에 바꿔 넣었지만 되지 않았고, viewDidAppear() 에 넣어서 실행 해보니

print("Safe Area Top Height: ", self.view.safeAreaInsets.top)
// 3.2

이렇게 정확한 값이 나왔고 덕분에 safe area guide 에 따라서 앱에 적용할 수 있었다.

무엇 때문에 viewDidAppear() 단계에서 값이 출력 됐는지 알아보자

일단 UIViewController 의 LifeCycle은 이렇다.

Apple 문서에 적힌 설명을 읽어 보자.

ViewDidAppear()

"You can override this method to perform additional tasks associated with presenting the view. If you override this method, you must call super at some point in your implementation."

이 방법을 재정의 하여 보기 표시와 관련된 추가 작업을 수행 할 수 있습니다.
이 메서드를 재정의 하면 구현의 특정 시점에서 super를 호출해야 합니다.

'보기 표시와 관련된' 이 구문을 보니 UIView 의 어떤 Presenting, 표현 을 위한 작업을 하려면 이곳에서 해야 된다는 말 같다고 생각했지만 비슷한 이야기는 viewWillAppear() 에도 적혀있다.

무슨 차이 때문에 viewDidAppear()에서만 값이 넘어 오는지 모르겠으나,,, Safe Area 를 사용하려면 뷰가 모두 나타나고 나서야 사용이 가능한 것 같다.

profile
iOS Developer 💻

0개의 댓글