 extension TabNavigationController: UIScrollViewDelegate {
     public func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
         if scrollView.isDecelerating {
-            _endsRootViewControllersAppearanceTransitionIfNeccessary()
-        } else {
-            let selectedIndex = _rootViewControllersContext.selectedIndex
-            let startIndex = _rootViewControllersContext.viewControllers.index(before: selectedIndex)
-            let endIndex = _rootViewControllersContext.viewControllers.index(after: selectedIndex)
-            let range = startIndex...endIndex
-            let availableRange = range.clamped(to: _rootViewControllersContext.viewControllers.startIndex..._rootViewControllersContext.viewControllers.index(before: _rootViewControllersContext.viewControllers.endIndex))
-            _viewControllersWaitingForTransition = Array(_rootViewControllersContext.viewControllers[availableRange])
-            _viewControllersWaitingForTransition.forEach({ $0.viewWillBeginInteractiveTransition() })
-        }
+            _endsRootViewControllersAppearanceTransitionIfNecessary()
+        }
+        _beginsRootViewControllersInteractiveTransition()
     }
     
     public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {

    }
    
    public func tabNavigationBar(_ tabNavigationBar: TabNavigationBar, didSelectTitleItemAt index: Int) {
        _endsRootViewControllersAppearanceTransitionIfNeccessary()
    }
    
    public func tabNavigationBarDidTouchNavigatiomBackItem(_ tabNavigationBar: TabNavigationBar) {

        if updateNavigationBar { _tabNavigationBar.setSelectedTitle(at: index, animated: animated) }
        
        _beginsRootViewControllersAppearanceTransition(at: index, updateNavigationItems: updateNavigationItems, animated: animated)
        if !animated { _endsRootViewControllersAppearanceTransitionIfNecessary() }
    }
    
    fileprivate func _beginsRootViewControllersAppearanceTransition(at index: Array<UIViewController>.Index, updateNavigationItems: Bool, animated: Bool) {
        guard _earlyCheckingBounds(index, in: _rootViewControllersContext.viewControllers) else { return }
        
        let viewController = _rootViewControllersContext.viewControllers[index]
