Xamarin UITableView 动画从错误的位置开始

Xamarin UITableView animation starts from wrong position

在我看来我有一个 UILabel 和一个 UITableView

我想让它们向下移动 40 像素。以下是我的代码

        var newFrame = newsStand.Frame;
            newFrame = new CGRect (newsStand.Frame.X, newsStand.Frame.Y+40, newsStand.Frame.Width, newsStand.Frame.Height);
            UIView.BeginAnimations ("slideAnimation");
            UIView.SetAnimationDuration (2);
            UIView.SetAnimationCurve (UIViewAnimationCurve.EaseInOut);
            UIView.SetAnimationDelegate (this);
            UIView.SetAnimationDidStopSelector (new Selector ("slideAnimationFinished"));
            nfloat newY=searchLabel.Center.Y+40;
            searchLabel.Center = new  CGPoint (searchLabel.Center.X, newY);
            newsStand.Frame =  newFrame;
            UIView.CommitAnimations ();

newsStand 是我的 UITableView 实例和 searchLabelUILabel 实例。执行此代码时,searchLabel 通过向下移动 40 个像素按预期进行动画处理。但是 newsStand 最初向上跳跃 40 个像素并动画到其原始位置。我已经尝试设置 newsStand 的中心(就像我为 searchLabel 所做的那样)而不是 Frame 。但结果是一样的。是什么导致了这种行为?

你的方法很复杂。您可以使用 UIView.Animate() 来大大简化动画:

var myLabel = new UILabel (new CGRect (100, 100, 100, 40))
{ 
    Text = "Animate me!",
    TextColor = UIColor.Yellow
};
window.Add (myLabel);

UIView.Animate (
    duration: 0.5,
    animation: () => myLabel.Center = new CGPoint (myLabel.Center.X, myLabel.Center.Y + 40),
    completion: () => {}
);