이슈: 구현하고자 한 것은 A View 에서 B Detail View 로 전환할 때, A View의 tableViewCell들이 움직이면서 기존의 흰색 navigation Bar까지 가리고, B Detail view로 전환된 화면은 navigation Bar가 투명한 것이다.
결국 원하는 대로 구현하지 못해 다른 기능 구현 후 시도할 예정이지만, 시도하는 과정에서 배운 것은 다음과 같다.
흰색 내비게이션 바를 갖고 있는 A View에서 셀이 움직이는 애니매이션으로 내비게이션 바까지 가리려면 key window위에 뷰를 붙여야 한다. (image zoom transition 참고)
키 윈도우는 유일하다.
키 윈도우는 키보드와 터치와 관련되지 않은 이벤트들을 받는다.
터치 이벤트는 발생한 윈도우에 이벤트가 도달하는 반면 좌표 값을 갖고 있지 않은 이벤트는 키 윈도우에 도달한다.
일반적으로 앱의 메인 윈도우가 키 윈도우 이다.
The key window receives keyboard and other non-touch related events. Only one window at a time may be the key window.
Whereas touch events are delivered to the window where they occurred, events that do not have a relevant coordinate value are delivered to the key window. Only one window at a time can be the key window, and you can use a window’s isKeyWindow property to determine its status. Most of the time, your app’s main window is the key window, but UIKit may designate a different window as needed.
If you need to know which window is key, observe the UIWindowDidBecomeKey and UIWindowDidResignKey notifications. The system sends those notifications in response to key window changes in your app. To force a window become key, or to force a window to resign the key status, call the appropriate methods of this class.
(원하는 트렌지션을 구현하기 위해 키 윈도우에 배경 이미지의 top 부분을 붙였지만, 원하는 대로 작동하지 않았다.)
2. navigationBar의 frame 값을 가져올 때 UINavigationBar.appearance().frame을 사용하면 원하는 값을 얻을 수 없다.
```swift
UINavigationBar.appearance().frame // (0.0, 0.0, 0.0, 0.0)
self.navigationController?.navigationBar.frame // Optional((0.0, 20.0, 375.0, 44.0))
UIViewController와 UINavigationController 의 UINavigationItem 차이
navigation controller를 인터페이스 빌더 또는 코드로 생성한다.
내비게이션 바의 보여짐 여부를 커스터마이징 할 때 UINavigationController 객체의 navigationBar 프로퍼티를 사용한다.
이 프로퍼티로 frame, bounds, alpha, view 계층구조를 바꾸면 안된다.
내비게이션 컨트롤러의 스택에 push할 각각의 UIViewController에 있는 navigationItem 과 title 프로퍼티를
설정 함으로써 내비게이션 바의 내용을 관리한다.
애플 문서
A navigation controller builds the contents of the navigation bar dynamically using the navigation item
objects (instances of the UINavigationItem class) associated with the view controllers on the navigation stack.
To customize the overall appearance of a navigation bar, use UIAppearance APIs.
To change the contents of the navigation bar, you must therefore configure the navigation items of your custom view controllers.
이슈: 구현하고자 한 것은 A View 에서 B Detail View 로 전환할 때, A View의 tableViewCell들이 움직이면서 기존의 흰색 navigation Bar까지 가리고, B Detail view로 전환된 화면은 navigation Bar가 투명한 것이다. 결국 원하는 대로 구현하지 못해 다른 기능 구현 후 시도할 예정이지만, 시도하는 과정에서 배운 것은 다음과 같다.
Whereas touch events are delivered to the window where they occurred, events that do not have a relevant coordinate value are delivered to the key window. Only one window at a time can be the key window, and you can use a window’s isKeyWindow property to determine its status. Most of the time, your app’s main window is the key window, but UIKit may designate a different window as needed.
If you need to know which window is key, observe the UIWindowDidBecomeKey and UIWindowDidResignKey notifications. The system sends those notifications in response to key window changes in your app. To force a window become key, or to force a window to resign the key status, call the appropriate methods of this class.
UIViewController와 UINavigationController 의 UINavigationItem 차이
스택오버플로우 질문 https://stackoverflow.com/questions/37480089/why-there-is-a-navigationitem-in-the-uiviewcontroller
leftBarButtonItem과 backBarButtonItem의 차이