You should realize your struct of views.
Now, you have a NavigationController first, and its rootViewController is a Tab BarController.
NavigationController[0] = TabBarController
and your TabBarController has 2 ViewController( Controller 1 and Controller 2 )
NavigationController[0] = TabBarController
then it includes 2 controllers like
TabBarController[0] = Controller 1
TabBarController[1] = Controller 2
when you call
self.navigationController.pushViewController
it means the NavigationController push to Controller 3,
so controller 3 will not show tab bar because it is not in TabBarController.
if you wanna push to controller 3 and still has tab bar,
you can insert a container in Controller 1 ( or insert a View ),
and create a NavigationController like this
let nav = NavigationController(rootViewController: yourController1)
self.yourViewInsertedInController1.addSubview(nav.view)
then in yourController1 run
self.navigationController.pushViewController
it will be right.