과제를 하면서 모달화면 안쓰고 네비게이션컨트롤러 사용하려고 하는데 엄청난 어려움을.. 겪었고,,
나 진짜 지식이 넘 부족하고 개념이 없구나 싶어서 열심히 찾아봤는데 일단 이건 과제걔기니까 미뤄두고,,
어쩌다 네비게이션컨트롤러를 원하게 사용하게됐는데
특정 뷰에서 네비게이션 바가 안보이길 원했다!
하지만 그건 안해봤는걸?
이게 찾아보니 setNavigationBarHidden 이라는게 있었고,, true 를 사용해주면 바가 숨겨지더라!!!!
근데 또다시 문제점은!
그 특정 뷰컨에서 다른 뷰컨을 쌓았다가 돌아가면 다시 네비게이션 바가 노출이 되는것이다!!!!
그 문제는 바로..
viewDidLoad 때문이었음!
사진에서 보면 viewDidLoad는 메모리에서 삭제되지 않으면 계속 남아있고, 삭제해줄때까지 다시 재생되지 않는다
viewWillAppear은 메모리에 뷰가 있다면 호출이 된다.
즉, viewDidLoad는 처음 로딩될 때 1회 호출이 되는 것이고 viewWillAppear은 매번 뷰가 다시 보일 때마다 실행된다.
그래서 viewDidLoad를 사용하면 다른 뷰컨을 호출했다가 다시 호출했을때 네비게이션바 숨긴게 다시 뿅 나타나게 된다..ㅎ
사실 정확히 무슨말인지 이해가 좀 어렵긴 하다 ㅋㅋㅋ 더알아보겠다,,
처음에 저렇게 해서
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated);
navigationController?.setNavigationBarHidden(true, animated: true) }
이렇게 작성해줬더니 저 뷰컨위로 쌓이는 뷰컨에서도 네비게이션 바가 안보이더라,,!
그래서 쌓이는 뷰컨에가서 똑같은 적어주고 Hidden을 false 로 바꿔주었다.
그랬더니 뜨는데
더 찾아보니 안보이게하는 뷰컨에서 viewWillDisappear을 통해서 뷰가 화면에서 사라질 시점에 네비게이션바를 다시 보이도록 설정해줄수 있었다!!!
그 코드들을 참고해서
override func viewWillAppear(_ animated: Bool) {
self.navigationController?.setNavigationBarHidden(true, animated: animated)
}
override func viewWillDisapppear(_ animated: Bool) {
self.navigationController?.setNavigationBarHidden(false, animated: animated)
}
요렇게 한 뷰컨에 작성해주는 걸로 바꿨는데 얘는 super. 이 빠졌네?
super은 부모 클래스를 참조하는 키워드로,.,
부모클래스의 라이프사이클 메서드를 재정의할때는 반드시 부모클래스의 구현을 호출해야 된다는데!
호출해주지 않으면 예상하지 못한 문제 발생할수 있단다..
그래서 viewWillAppear(_:) 하고 viewWillDisappear(_:)을 재정의 할때는
반드시! super.viewWillAppear(animated) 와 super.viewWillDisappear(animated)를 호출해야한다!
그렇게 또 바꾼 코드
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated) // 부모 클래스의 메서드 호출
navigationController?.setNavigationBarHidden(true, animated: animated)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated) // 부모 클래스의 메서드 호출
self.navigationController?.setNavigationBarHidden(false, animated: animated)
}
'iOS (스파르타)' 카테고리의 다른 글
UserDefaults ,,, (0) | 2024.07.28 |
---|---|
네비게이션컨트롤러 사용시 루트뷰로 돌아가기~ (0) | 2024.07.26 |
세그먼트바와 탭바 사용처의 궁금증!? (0) | 2024.07.23 |
iOS4기 24.07.15 (3) | 2024.07.15 |
ARC (Automatic Reference Counting) 이해하기 (0) | 2024.07.12 |