說,我有一個項目,如下所示:,支持自動佈局約束的UIView動畫的變化
有兩個UIView
秒 - 一個叫yellowBox
,另一個叫redBox
。自動佈局約束規定yellowBox
距離超級視圖的頂部60個點,其中350點引導和尾隨空格(即,視圖的左側和右側)。 redBox
具有相同的前後空白限制。兩個0框之間有一個垂直空間約束,表示yellowBox
的底部應始終直接位於redBox
的頂部。
當用戶點擊展開黃盒子按鈕,我想yellowBox
的高度增加,作爲結果,redBox
向下移動,繼續滿足垂直空間的限制(該yellowBox
總是在頂部redBox
)。這裏是動畫代碼:
- (IBAction)expandYellowBox:(id)sender {
[UIView animateWithDuration:0.5
animations:^{
CGRect newFrame = self.yellowBox.frame;
newFrame.size.height += 50;
self.yellowBox.frame = newFrame;
}];
}
但是,我一直無法得到這個工作正常。正如你可以通過紅色圖標看,有一個與此刻的約束的問題:
這是不夠公平,因爲沒有辦法自動佈局知道盒子的高度。但是,我不知道如何解決這個問題,以便它可以調整大小和移動框。例如,如果我在yellowBox
上指定高度約束,那麼這將防止它被調整大小。如果我設置的高度限制爲大於或等於(允許yellowBox
高度增加),那麼我得到不同的約束錯誤:
所有約束已經在故事板使用Xcode的建立 - 沒有編寫代碼。
任何幫助非常感謝。
編輯:事實證明,在yellowBox
是當按鈕被點擊增長 - 它只是我不知道,因爲它出現在redBox
後面。我只在點擊四次後才注意到它開始出現在redBox
的底部。但是,同樣的問題仍然存在 - 如何讓redBox
始終堅持到yellowBox
的底部。
u能請檢查是否叫烏爾的viewController viewDidLayoutSubViews方法?執行點擊事件時。 – CoolMonster
不,不調用'viewDidLayoutSubViews'方法。 – Skoota
嘗試設置綁定而不是幀可能會工作一段時間。甚至重複self.yellowBox.frame = newFrame;兩次在u代碼也可能會修復一些時間 – CoolMonster