 class TabNavigationController: ViewController {
     /// Tab navigation bar of the tab-navigation controller.
     public var tabNavigationBar: TabNavigationBar { return _tabNavigationBar }
+    public var tabNavigationTitleActionItems: [TabNavigationTitleActionItem] = [] {
+        didSet {
+            tabNavigationBar.navigationTitleActionItems = tabNavigationTitleActionItems
+        }
+    }
+    override public var tabNavigationTitleActionItemsWhenPushed: [TabNavigationTitleActionItem] {
+        get { return tabNavigationTitleActionItems }
+        set { tabNavigationTitleActionItems = newValue }
+    }
+    
     lazy
     private var _tabNavigationBar: TabNavigationBar = _createGeneralTabNavigationBar()
     
-    private weak var _trailingConstraintOflastViewController: NSLayoutConstraint?
+    public var interactivePopGestureRecognizer: UIPanGestureRecognizer { return _panGestureRecognizer }
+    fileprivate var _panGestureRecognizer: UIPanGestureRecognizer!
+    fileprivate var _panGestureBeginsLocation: CGPoint = .zero
+    fileprivate var _panGestureBeginsClips: Bool = true
+    fileprivate var _panGestureBeginsTransform: (former: CGAffineTransform, top: CGAffineTransform) = (.identity, .identity)
+    fileprivate var _panGestureBeginsTitleItems: [TabNavigationTitleItem] = []
+    
+    fileprivate var _transitionNavigationBarViews: TabNavigationBar.TabNavigationTransitionContext?
+    fileprivate var _panGestureBeginsItemViewsTransform: (fromTransform: CGAffineTransform, toTransform: CGAffineTransform) = (.identity, .identity)
+    
+    public var topViewController: UIViewController? {
+        return _viewControllersStack.last ?? { () -> UIViewController? in
+            guard !_rootViewControllersInfo.viewControllers.isEmpty && _rootViewControllersInfo.selectedIndex >= _rootViewControllersInfo.viewControllers.startIndex && _rootViewControllersInfo.selectedIndex < _rootViewControllersInfo.viewControllers.endIndex else {
+                return nil
+            }
+            return _rootViewControllersInfo.viewControllers[_rootViewControllersInfo.selectedIndex]
+        }()
+    }
+    
+    private weak var _trailingConstraintOfLastViewController: NSLayoutConstraint?
     
     fileprivate var _transitionNavigationItemViewsInfo: TabNavigationItemViewsInfo?
     lazy

        _contentScrollView.addSubview(viewController.view)
        _contentScrollView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[view]|", options: [], metrics: nil, views: ["view":viewController.view]))
        viewController.view.leadingAnchor.constraint(equalTo: _rootViewControllersInfo.viewControllers.last?.view.trailingAnchor ?? _contentScrollView.leadingAnchor).isActive = true
        if let _trailing = _trailingConstraintOflastViewController {
            _contentScrollView.removeConstraint(_trailing)
        }
        let _trailing = _contentScrollView.trailingAnchor.constraint(equalTo: viewController.view.trailingAnchor)
        _trailing.isActive = true
        _trailingConstraintOflastViewController = _trailing
        
        viewController.view.widthAnchor.constraint(equalTo: _contentScrollView.widthAnchor).isActive = true
        viewController.view.heightAnchor.constraint(equalTo: _contentScrollView.heightAnchor).isActive = true

    }
    private func _initializer() {
        tabNavigationBar.delegate = self
        _panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(_handePanGestureRecognizer(_:)))
        _panGestureRecognizer.isEnabled = false
    }
    
    override func loadView() {
        super.loadView()
        
        view.addGestureRecognizer(_panGestureRecognizer)
        _setupTabNavigationBar()
        _setupContentScrollView()
    }
