         super.viewDidLoad()
 
         // Do any additional setup after loading the view.
+        // Load all root view controllers if needed.
+        let viewControllers = _rootViewControllersContext.viewControllers
+        setViewControllers(viewControllers)
+        setSelectedViewController(at: _rootViewControllersContext.selectedIndex, animated: false)
+    }
+    
+    public override func viewWillAppear(_ animated: Bool) {
+        super.viewWillAppear(animated)
+        topViewController?.beginAppearanceTransition(true, animated: animated)
+    }
+    
+    public override func viewDidAppear(_ animated: Bool) {
+        super.viewDidAppear(animated)
+        _isViewAppeared = true
+        topViewController?.endAppearanceTransition()
+    }
+    
+    public override func viewWillDisappear(_ animated: Bool) {
+        super.viewWillDisappear(animated)
+        topViewController?.beginAppearanceTransition(false, animated: animated)
+    }
+    
+    public override func viewDidDisappear(_ animated: Bool) {
+        super.viewDidDisappear(animated)
+        topViewController?.endAppearanceTransition()
     }
 
     override public func didReceiveMemoryWarning() {

    fileprivate var _endingAppearanceViewControllers: Set<UIViewController> = []
    
    override public var shouldAutomaticallyForwardAppearanceMethods: Bool { return false }
    // MARK: - Overrides.
    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)

    }
    
    public func addViewController<T>(_ viewController: T) where T: UIViewController, T: TabNavigationReadable {
        if isViewLoaded {
            // Add view controller as child view controller if view of tab-navigation controller loaded.
            _addViewControllerWithoutUpdatingNavigationTitle(viewController)
            tabNavigationBar.addNavigationTitleItem(viewController._tabNavigationTitleItem)
        } else {
            _rootViewControllersContext.viewControllers.append(viewController)
        }
    }
    @discardableResult
    public func removeViewController<T>(_ viewController: T) -> (Bool, UIViewController?) where T: UIViewController, T:TabNavigationReadable {
