2015-09-07 58 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);