The view controller stack:
UITabBarController
|__ UINavigationController
|__ HomeViewController (hidesBottomBarWhenPushed=false)
|__ DetailViewController (hidesBottomBarWhenPushed=true)
The DetailViewController customize the navigation transition via UINavigationControllerDelegate, UIViewControllerAnimatedTransitioning and UIViewControllerInteractiveTransitioning protocols,
so that the navigation can be driven by a vertical pan or swipe gesture.
Use a real device to :
Step 1, drag the DetailViewController down and cancel, the tabBar flashes for a while and keep hidden after dragging.
Step 2, repeat the step 1 again, the tabBar remains at the bottom, but without buttons.