/// <summary>
        /// Cloned in CoreTableSource
        /// </summary>
        public virtual void AnimateTabBar(bool?show, bool suspendTrackingDuringAnimation = false, bool force = false)
        {
            CoreUtility.ExecuteMethod("AnimateTabBar", delegate()
            {
                if (this.AutoHideControllerInstance != null)
                {
                    if (!this.AutoHideControllerInstance.IsControllerVisible)
                    {
                        return;
                    }
                }
                if (!force && (this.SuspendTabBarTracking || this.DisableTabBarTracking))
                {
                    return;
                }
                UITabBar tabBar = this.AutoHideTabBarController.TabBar;

                if (!OriginalTabBarFrame.HasValue)
                {
                    OriginalTabBarFrame = tabBar.Frame;
                }

                tabBar.Layer.RemoveAnimation(DRAG_ANIMATION_NAME);

                if (show.HasValue)
                {
                    if (suspendTrackingDuringAnimation)
                    {
                        this.SuspendTabBarTracking = true;
                    }
                    CATransaction.Begin();
                    CATransaction.CompletionBlock = new Action(delegate()
                    {
                        if (suspendTrackingDuringAnimation) // only ours
                        {
                            this.SuspendTabBarTracking = false;
                        }
                        this.BeginInvokeOnMainThread(delegate()
                        {
                            CoreUtility.ExecuteMethod("DraggingStarted.CompletionBlock", delegate()
                            {
                                if (AutoHideTabBarShouldBeHidden)
                                {
                                    tabBar.Frame = new CGRect(tabBar.Frame.X, this.AutoHideTabBarController.View.Frame.Height, tabBar.Frame.Width, tabBar.Frame.Height);
                                }
                                else
                                {
                                    tabBar.Frame = OriginalTabBarFrame.GetValueOrDefault();
                                }
                                tabBar.Layer.RemoveAnimation(DRAG_ANIMATION_NAME);
                            });
                        });
                    });


                    if (!show.Value)
                    {
                        // content going up
                        AutoHideTabBarShouldBeHidden = true;

                        AnimationBuilder
                        .Begin(tabBar.Layer, DRAG_ANIMATION_NAME)
                        .MoveTo(new CGPoint(tabBar.Layer.Frame.X, this.AutoHideTabBarController.View.Frame.Height), 0f, 0.3f)
                        .Commit();
                    }
                    else if (show.Value)
                    {
                        // content going down
                        AutoHideTabBarShouldBeHidden = false;

                        AnimationBuilder
                        .Begin(tabBar.Layer, DRAG_ANIMATION_NAME)
                        .MoveTo(OriginalTabBarFrame.Value.Location, 0f, 0.3f)
                        .Commit();
                    }

                    CATransaction.Commit();
                }
            });
        }