2015-09-07 78 views
2

我有3个使用AutoLayout显示的UIViews。动画UIView的兄弟会立即进入最终位置

  1. 的UILabel
  2. 的UIView用于浏览日程表。这种观点是包含一个UIView这是包含两个UIButtons和几个UILabels的
  3. 约会

查看2的UITableView又将自定义的UIView有一个约束的定位是其顶部等于看到的底部 查看3有一个约束,是定位其顶端等于视图2的底部

很简单的东西,下面是一张图片显示恒定视图2的约束被动画。

enter image description here

的问题是,查看3立即采取其最终位置。为什么在动画期间它不能保持定位到视图2的底部?

黑色的空间,这将最终由当前动画查看填充2

我使用MonoTouch的和代码来执行动画是

// calendarDateBrowseYConstraint Is View 2 
this.calendarDateBrowseYConstraint.Constant = value; 

UIView.Animate(
    5.25f, 
    0.0f, 
    UIViewAnimationOptions.TransitionFlipFromBottom, 
    () => 
    { 
     this.calendarDateBrowse.LayoutIfNeeded(); 
    }, 
    null); 
+0

表明确实动画 – Fonix

+0

请告诉一下意见,UILabels可与自动布局定义动画预期的行为的代码。为了找出UILabels是否导致问题,用简单的UIViews将它们临时替换,然后查看动画作品。 – Joride

回答

0

LayoutIfNeeded()参考未着色区主视图&请确保动画不在背景中执行。

3

如果LayoutIfNeeded()容器视图中,请确保您调用布局。你没有提到你的观点,但层次我假设你有类似的东西:

ViewController: 
-view 
---myContainerView 
------label 
------viewWithCalendar 
------viewWithTableViewOrTableView 

那是正确的打电话给你的动画正确的方法是(以一个简单的动画在前):

this.calendarDateBrowseYConstraint.Constant = value; 
UIView.animateWithDuration(durationTime) { 
    myContainerView.layoutIfNeeded() 
} 

而且你:

this.calendarDateBrowseYConstraint.Constant = value; UIView.Animate(
    5.25f, 
    0.0f, 
    UIViewAnimationOptions.TransitionFlipFromBottom, 
    () => 
    { 
     myContainerView.LayoutIfNeeded(); 
    }, 
    null);